在ASP.NET Web API中处理非法查询字符串参数名称

时间:2016-08-12 22:10:14

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

我有一个客户端向我发送一个查询字符串,其中几个参数以美元($)符号开头。我无法在C#中使用$启动参数名称,这意味着在调用我的操作时值不会映射。

在有人要求之前,我不能让客户端更改查询字符串的名称。

我有一种感觉,我将不得不编写某种自定义动作过滤器来查找这些参数,重命名它们然后将它们传递给正确的操作。但是,在我做完所有这些之前,我想在这里发布问题,看看是否有一个我缺少的解决方案。

谢谢!

2 个答案:

答案 0 :(得分:0)

不幸的是,$不应该用作参数名称的一部分,因为它在URI定义中保留

What does dollar sign $ do in url?

因此,您收到的查询字符串是正式错误的,最好的解决方案是更改它,因为未来的Http实现甚至某些防火墙可能会破坏您的解决方案。

解决方法是覆盖查询字符串解析器,并使用HttpRequest属性Url(可能是查询方法)或RawUrl直接访问URI:

https://msdn.microsoft.com/en-us/library/system.web.httprequest.url(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/system.web.httprequest.rawurl(v=vs.110).aspx

答案 1 :(得分:0)

这就是我处理问题的方法:

    [HttpGet, Route("myResource")]
    public virtual IHttpActionResult GetThings()
    {
        var query = HttpUtility.ParseQueryString(Request.RequestUri.Query);
        var queryParam = query["$myParam"];

        return Ok();
    }