尽管请求成功,但事件日志警告“此请求的URL超出了配置的maxUrlLength”

时间:2016-03-11 20:25:36

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

在我的IIS服务器上,我收到一条警告消息,记录在服务器的应用程序事件日志中,其中包含一个带有长URL的特定种类的传入HTTP请求。尽管有警告消息,ASP.NET MVC仍然可以正确处理请求并将预期的响应返回给客户端。

事件日志消息警告消息包含以下文本:

Event code: 3005 
Event message: An unhandled exception has occurred. 

...

Process information: 
    Process name: w3wp.exe 

....

Exception information: 
    Exception type: HttpException 
    Exception message: The length of the URL for this request exceeds the configured maxUrlLength value.
    at System.Web.HttpRequest.ValidateInputIfRequiredByConfig()
    at System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)

事件日志警告消息的其他属性/值信息:

Source: ASP.NET 4.0.30319.0
Event ID: 1309

同样,在这种情况下,传入的HTTP请求最终成功,因此与similar questions不同,我的问题是而不是如何成功增加最大URL长度对于我服务器上的传入请求。

相反,我的问题是:鉴于我的请求成功,我是否可以防止将此(显然是虚假的)警告消息记录到我的应用程序事件日志中(在日志中添加噪音可能会模糊不清其他,“真正的”警告)?

更多详情

此行为(长HTTP请求成功;写入应用程序事件日志的警告消息)在运行Windows 10和IIS 10的本地工作站PC以及运行Windows Server 2008 R2和IIS 7.5的生产服务器上都可以重现。

正在使用目标框架构建项目:.NET Framework 4.5.1。 (更新:在将项目重建为目标.NET Framework 4.6.1后,错误仍然会重现。)

触发警告消息的URL是表单的长URL(大约500个字符)(例如):

https://myserver.example.com:443/api/MyDataRequestRoute/1862241,2146171,1998613,1916341,2150391,2067889,749865,2167130,1861707,1914448,668472,2170269,2162087,2024193,1857969,1869304,2162128,1980539,992479,1347745,1958431,282062,1925128,2147391,2153550,1187318,2039442,441327,1298384,2153556,1526985,1893085,2144727,2144288,1582412,2142540,2170281,1183488,1865249,1348332,1322007,2170282,2170283,1750061,2098502,1915955,905164,1353083,2099151,1347806,2160403,2147200,1191371,1347921,1909967,2017687,2012831 

URL映射到以下形式的ASP.NET MVC Controller方法:

[HttpGet]
[Route("MyDataRequestRoute/{commaSeparatedPropertyIDs}", Name = "MyDataRequestRoute")]
public HttpResponseMessage MyDataRequestRoute(string csv)
{
    string xmlResult = // Code to build result based on the specified csv...

    return new HttpResponseMessage()
    {
        Content = new StringContent(xmlResult, Encoding.UTF8, "text/xml")
    };
}

为了让这些长URL工作,我之前对我的应用程序和服务器进行了一些配置更改,具体来说:

  • 根据this answer在服务器的Windows注册表中设置UrlSegmentMaxLength值32766。
  • 在我的“Api”项目的web.config文件中设置httpRuntime元素的属性:

<httpRuntime targetFramework="4.5" maxRequestLength="131072" maxUrlLength="32766" maxQueryStringLength="32766" />

  • 在同一个web.config文件中设置requestLimits元素的maxAllowedContentLength属性:

<requestLimits maxAllowedContentLength="134217728" />

0 个答案:

没有答案