【发布时间】:2016-04-19 14:15:28
【问题描述】:
我有一个基于 Windows 登录检索一些用户详细信息的 WebAPI 方法:
[Route("api/user/{username}/details")]
public IHttpActionResult(string username)
{
// ...
}
假设我是MYCORP 域上的用户arjan,那么我网页上的一些javascript 会向http://myserver/api/user/MYCORP\arjan/details 发出GET。
此路由永远无法正确解析,因为 IIS、ASP.NET 或其他东西会在路由之前将 \ 重写为 /。
我可以在 Fiddler 中看到请求了正确的 URL,但是从 IIS 返回的错误页面清楚地表明它没有找到 http://myserver/api/user/MYCORP\arjan/details。
我正在使用 MVC 5/.NET 4.5/IIS 7.5/VS2015/Windows 7。
那么:为什么我的网络服务器会转换请求 URI
http://myserver/api/user/MYCORP\arjan/details
进入
http://myserver/api/user/MYCORP/arjan/details
我该如何关闭它?
将\ 百分比编码为%5C 并不能解决问题,解码似乎很早就在服务器上发生了。
请注意,这不是 Route parameter with slash "/" in URL 的重复项,后者询问是否使用 / 作为 URL 参数。这个问题是关于为什么 IIS/ASP.NET 将 \ 更改为 /。
【问题讨论】:
-
你也可以在url中编码用户名
-
@jrummell:我尝试用
%5C替换“\”,但解码似乎很早就在服务器上发生了。在服务器上,在 MVC 中,我永远看不到编码值... -
你有没有为这个问题找到一个可以接受的解决方案?
-
@JaredStroeb:抱歉,没有……
标签: asp.net asp.net-mvc iis