我有一个WebAPI方法,可以根据Windows登录检索一些用户详细信息:
[Route("api/user/{username}/details")]
public IHttpActionResult(string username)
{
// ...
}
假设我是arjan
域上的用户MYCORP
,那么我网页上的某些javascript会向GET
发出http://myserver/api/user/MYCORP\arjan/details
。
此路由永远无法正确解析,因为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的副本,它会询问使用/
作为网址参数。这个问题是关于IIS / ASP.NET将\
更改为/
的原因。
答案 0 :(得分:1)
一个workaroud将路径/方法签名更改为
[Route("api/user/{domain}/{username}/details")]
public IHttpActionResult(string domain, string username)
{
// ...
}
因为这会正确处理收到请求......