Доступ к переменным строки запроса, отправленным как POST в HttpActionContext

Я пытаюсь получить доступ к параметру строки запроса, который был отправлен с помощью метода POST (WebClient) в веб-API в ASP.NET MVC 5 (в переопределенном AuthorizationFilterAttribute).

Для Get я использовал следующий трюк: var param= actionContext.Request.GetQueryNameValuePairs().SingleOrDefault(x => x.Key.Equals("param")).Value;

Однако, как только я использую POST, это работает, и переменная paran устанавливается на ноль. Я думаю, это потому, что метод строки запроса применяется только к URL, а не к телу. Есть ли способ получить строку запроса (предпочтительно используя один метод) для запросов GET и POST?

РЕДАКТИРОВАТЬ: код WebClient

using (WebClient client = new WebClient())
{
        NameValueCollection reqparm = new NameValueCollection();

        reqparm.Add("param", param);

        byte[] responsebytes = client.UploadValues("https://localhost:44300/api/method/", "POST", reqparm);
        string responsebody = Encoding.UTF8.GetString(responsebytes);

        return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(responsebody);

    }
}

1 ответ

Решение

Используя код, который вы показываете, вы загружаете param=value в теле запроса, используя application/x-www-form-urlencoded Тип содержимого.

Если вы также хотите использовать строку запроса, вам нужно установить ее отдельно, используя WebClient.QueryString свойство:

// Query string parameters
NameValueCollection queryStringParameters = new NameValueCollection();
queryStringParameters.Add("someOtherParam", "foo");
client.QueryString = queryStringParameters;

// Request body parameters
NameValueCollection requestParameters = new NameValueCollection();
requestParameters.Add("param", param);

client.UploadValues(uri, method, requestParameters);

Это сделает запрос перейти к uri?someOtherParam=foo, что позволяет вам читать параметры строки запроса на сервере через actionContext.Request.GetQueryNameValuePairs(),

Другие вопросы по тегам