ASP.NET MVC,Url路由:最大路径(URL)长度如何实现?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (94)

情景

我有一个应用程序,它使用了旧的查询字符串URL结构:

?x=1&y=2&z=3&a=4&b=5&c=6

并将其改为路径结构:

/x/1/y/2/z/3/a/4/b/5/c/6

我们使用ASP.NET MVC和(自然)ASP.NET路由。

问题

问题是我们的参数是动态的,并且理论上对我们需要适应的参数数量没有限制。

这一切都很好,直到我们碰到下面的异常:

HTTP Error 400.0 - Bad Request ASP.NET detected invalid characters in the URL.

当我们的URL超过一定的长度时,IIS会抛出这个错误。

Nitty Gritty

以下是我们发现的:

这不是一个IIS问题

IIS确实有一个最大路径长度限制,但上面的错误不是这个。

了解点iis点网络如何使用请求过滤部分“基于请求限制的过滤器”

如果IIS的路径太长,则会抛出404.14,而不是400.0。

此外,IIS最大路径(和查询)长度是可配置的:

<requestLimits


   maxAllowedContentLength="30000000"


   maxUrl="260"


   maxQueryString="25" 


              />

这是一个ASP.NET问题

经过一番探讨:

IIS论坛主题:ASP.NET 2.0最大URL长度? http://forums.iis.net/t/1105360.aspx

事实证明,这是一个ASP.NET(嗯,.NET真的)问题。

问题的核心在于,据我所知,ASP.NET无法处理超过260个字符的路径。

在棺材里的钉子,这是由菲尔哈克本人证实:

堆栈溢出ASP.NET URL MAX_PATH限制问题ID 265251

问题

那么问题是什么?

问题是,这有多大的局限性?

对于我的应用程序,这是一个交易杀手。对于大多数应用程序来说,这可能不是问题。

怎么披露?没有提到ASP.NET路由的地方,我曾经听说过这种限制。ASP.NET MVC使用ASP.NET路由的事实使这种影响更大。

你怎么看?

提问于
用户回答回答于

我最终在web.config中使用了以下内容来使用Mvc2和.Net Framework 4.0来解决此问题

<httpRuntime maxUrlLength="1000" relaxedUrlToFileSystemMapping="true" />
用户回答回答于

要解决这个问题,请这样做:

在项目的根web.config中,在system.web节点下:

<system.web>
    <httpRuntime maxUrlLength="10999" maxQueryStringLength="2097151" />
...

另外,我必须在system.webServer节点下添加它,否则我的长查询字符串出现安全错误:

<system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxUrl="10999" maxQueryString="2097151" />
      </requestFiltering>
    </security>
...

扫码关注云+社区