访问在HttpActionContext中作为POST发送的查询字符串变量

时间:2015-10-18 18:04:27

标签: c# asp.net-mvc asp.net-web-api asp.net-mvc-5

我尝试访问使用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);

    }
}

1 个答案:

答案 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()读取服务器端的查询字符串参数。