我尝试访问使用POST方法(WebClient)发送到ASP.NET MVC 5中的Web API的查询字符串参数(在重写的AuthorizationFilterAttribute中)。
对于Get,我使用了以下技巧:
var param= actionContext.Request.GetQueryNameValuePairs().SingleOrDefault(x => x.Key.Equals("param")).Value;
但是,一旦我使用POST,这确实有效,变量 paran 设置为null。我认为这是因为查询字符串方法仅适用于url而不是body。有没有办法获得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);
}
}
答案 0 :(得分:1)
使用您显示的代码,您可以使用param=value
内容类型在请求正文中上传application/x-www-form-urlencoded
。
如果您还想使用查询字符串,则需要使用WebClient.QueryString
property单独设置:
// 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()
读取服务器端的查询字符串参数。