当 url 包含编码的 & 符号时,MVC WEB API 路由失败
Posted
技术标签:
【中文标题】当 url 包含编码的 & 符号时,MVC WEB API 路由失败【英文标题】:MVC WEB API routing fails when url contains encoded ampersand 【发布时间】:2012-12-30 19:47:43 【问题描述】:当我调用我的网络服务女巫时,我得到了两个参数:
从客户端 (&) 检测到具有潜在危险的 Request.Path 值。
路由配置:
config.Routes.MapHttpRoute(
name: "PropertiesSearch",
routeTemplate: "api/property/Search/category/query",
defaults: new controller = "Property", action = "Search", category = "common", query = string.Empty
);
控制器方法:
[HttpGet]
public SearchResult Search(string category, string query)
当我调用 api 时:
/api/property/search/homes/areaId%3D20339%26areaId%3D20015
从客户端 (&) 检测到具有潜在危险的 Request.Path 值。
这样做:
/api/property/search/homes/?query=areaId%3D20339%26areaId%3D20015
工作正常。
如何解决路由解码问题?
【问题讨论】:
【参考方案1】:斯科特·汉塞尔曼blogged about this。您可能需要检查 web.config 中 <httpRuntime>
节点的 requestPathInvalidCharacters
属性。
我个人会避免在 uri 部分中使用此类字符,而只是将这些值作为查询字符串参数。
【讨论】:
+1 就我个人而言,我会避免 uri 部分中的此类字符,并简单地将这些值作为查询字符串参数。不能再大胆了。 你是对的。我们让它与 web.config 绕过一起工作,但最终还是强制它使用查询字符串参数进行设置。我们希望它成为 URL 的一部分的原因是因为我们使用自动生成的帮助页面来创建 API 参考。而routeTemplate
不允许我们在其中包含?
,因此没有好的方法告诉用户使用查询参数包含query
@ErikPhilips 为什么要避免在 URI 的路径部分使用完全有效的字符(&、= 等)?与号字符仅保留在 URI 的查询部分中。
@JoshM 因为创建requestpathInvalidCharacters
有非常好的、正当的理由......因为要求不高而一时兴起绕过它并不是关闭它的好理由。跨度>
@ErikPhilips 完成:***.com/questions/35653835/…以上是关于当 url 包含编码的 & 符号时,MVC WEB API 路由失败的主要内容,如果未能解决你的问题,请参考以下文章