Доступ к переменным строки запроса, отправленным как 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()
,