【问题标题】:Can I turn off ASP.NET MVC changing backslash in URL params to forward slash?我可以关闭 ASP.NET MVC 将 URL 参数中的反斜杠更改为正斜杠吗?
【发布时间】: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


【解决方案1】:

一种解决方法是将路由/方法签名更改为

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

因为这将正确处理传入的请求...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多