【问题标题】:ASP.NET returns HTTP 500 instead of 404ASP.NET 返回 HTTP 500 而不是 404
【发布时间】:2020-07-06 23:22:34
【问题描述】:

由于某种原因,当访问不存在的路由时,我的 ASP.NET Web 应用程序返回错误 500(显然源自处理程序“ExtensionlessUrlHandler-Integrated-4.0”)。

在我将Web.config 文件的<add name="ExtensionlessUrlHandler-Integrated-4.0" ... 行中的path="*." 更改为path="*" 以解决another problem 后,此问题开始出现(无法处理最后一个点后带有点的路由)斜线)。

我无法将path 改回"*.",即使这正是suggested as a solution in another question,因为这将带回the other problem - 在最后一个斜线之后的部分中不再找到带有点的路由。

就像链接的other question 一样,我正在使用 OData。但是,在我的情况下,我根本不知道它应该在路由解析中发挥任何作用,因为我认为我们将它视为在我们的 C# 项目中引用并由我们的一些 Web API 端点。

<modules runAllManagedModulesForAllRequests="true"/> 已在我的Web.config 文件中设置。

我还能做些什么来为未知路由返回 404“extension-ful”路由(即最后一个斜线后的最后部分包含点的路由)被接受?

编辑:我设法增加了我的 FREB 日志大小,现在看到有问题的条目是数字 1346,说

ModuleName="ManagedPipelineHandler", Notification="EXECUTE_REQUEST_HANDLER", HttpStatus="500", HttpReason="Internal Server Error", HttpSubStatus="0", ErrorCode="Rekursion zu tief, Stapelüberlauf。 (0x800703e9)", ConfigExceptionInfo=""

在英文中,错误信息的意思是:“Recursion too deep, stack overflow。”

因此,这似乎与another question 中的问题相同,但是,那里的答案对我的情况没有帮助:

  • Philip 建议删除各种处理程序,这对我没有任何改变。
  • Joe Davis 建议使用 "*." 路径的解决方案,该路径有效,但会导致 other problem,如上所述。

两个答案都引用了我的Web.config 文件中的<handlers> 部分,目前看起来像这样:

<handlers>
    <remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
    <remove name="OPTIONSVerbHandler"/>
    <remove name="TRACEVerbHandler"/>
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
</handlers>

【问题讨论】:

  • 尝试运行失败的请求跟踪并获取有关问题原因的更多详细信息。 docs.microsoft.com/en-us/iis/troubleshoot/…
  • @JalpaPanchal:我已经尝试过了,但是在到达实际选择错误 500 的位置之前,日志是 truncated。一旦我设法增加最大日志大小,我也许可以添加一些额外的信息,尽管现在我还不太确定我会在这数百行中寻找什么。
  • 您可以尝试这个建议的帖子步骤来增加 maxLogFileSizeKB:stackoverflow.com/a/60879049/11147346。您可以尝试运行 frt 以获取 500 错误代码。
  • @JalpaPanchal:是的,我会的,当我在工作的时候。
  • @JalpaPanchal:我已经用 FREB 日志中的一些信息更新了帖子。这是一个很长的日志文件,虽然我仍在扫描这些行,但我不确定要查找什么。

标签: asp.net routing routes iis-10


【解决方案1】:

确保您的 Web api 与 '.' 配合使用(点)在路径为“*”的全局处理程序之前添加特定的 API 处理程序。

见下例:

  <add name="ApiURIs-ISAPI-Integrated-4.0-ForApi" path="/api/*" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />        

【讨论】:

    猜你喜欢
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    相关资源
    最近更新 更多