我有一个客户端向我发送一个查询字符串,其中几个参数以美元($
)符号开头。我无法在C#中使用$
启动参数名称,这意味着在调用我的操作时值不会映射。
在有人要求之前,我不能让客户端更改查询字符串的名称。
我有一种感觉,我将不得不编写某种自定义动作过滤器来查找这些参数,重命名它们然后将它们传递给正确的操作。但是,在我做完所有这些之前,我想在这里发布问题,看看是否有一个我缺少的解决方案。
谢谢!
答案 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();
}