Подтвердить что ты не робот

Доступ к строке запроса в ASP.Net Web Api?

Я использую шаблон по умолчанию, созданный Asp.net Web Api. Я работаю с частью Get():

        // GET api/values
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

По какой-то причине я думал, что единственное, что вам нужно было сделать для доступа к строке запроса, это просто создать переменную входной строки. Поэтому я создал еще одну функцию (единственное изменение, которое я сделал) для созданного по умолчанию контроллера:

        public IEnumerable<string> Get(string queryString)
    {
        return new string[] { "value3", "value4" };
    }

Я поставил точку прерывания в обоих методах, но даже если добавить строку запроса, она всегда переходит к функции без параметров. Поэтому, если я перейду к http://mybaseurl/api/values?foo=f  он все равно будет Get() вместо get (string queryString). Разве это не работает так, как я думал? Я знаю, что могу получить доступ к строке запроса в функции Get(), используя Request.RequestUri.ParseQueryString();, но я предпочитаю, чтобы она была разделена, если это возможно.

4b9b3361

Ответ 1

Имя ключа строки запроса должно соответствовать имени параметра для действия:

/API/значения? QueryString = F

public IEnumerable<string> Get(string queryString)
    {
        return new string[] { "value3", "value4" };
    }

Ответ 2

Несмотря на то, что ответ @Kiran Challa правильный, есть несколько ситуаций, которые вы могли бы предпочесть получить параметры URL непосредственно из URL-адреса. в этих сценариях попробуйте следующее:

using System.Net.Http;

var allUrlKeyValues = ControllerContext.Request.GetQueryNameValuePairs();

string p1Val = allUrlKeyValues.LastOrDefault(x => x.Key == "p1").Value;
string p2Val = allUrlKeyValues.LastOrDefault(x => x.Key == "p2").Value;
string p3Val = allUrlKeyValues.LastOrDefault(x => x.Key == "p3").Value;

Теперь для следующего URL-адреса p1Val будет "Apple", p2Val будет "Banana", а p3Val будет пустым.

.../api/myController?p1=Apple&p2=Banana

Обновление:

Спасибо за предложения, теперь исходный код этого теста находится в GitHub и он также работает и может быть протестирован на Azure: