我可以在URL参数中关闭ASP.NET MVC更改反斜杠以转发斜杠吗?

时间:2016-01-14 09:56:49

标签: asp.net asp.net-mvc iis

我有一个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将\更改为/的原因。

1 个答案:

答案 0 :(得分:1)

一个workaroud将路径/方法签名更改为

[Route("api/user/{domain}/{username}/details")]
public IHttpActionResult(string domain, string username)
{
    // ...
}

因为这会正确处理收到请求......