gpt4 book ai didi

asp.net-mvc - 是否可以在MVC网站上使用自定义错误页面,但不能在Web API上使用?

转载 作者:行者123 更新时间:2023-12-03 09:01:47 24 4
gpt4 key购买 nike

我有一个带有/api文件夹的MVC项目,其中包含我的Web API Controller 。我想要以下东西:

  • 我的MVC站点在发生错误时提供自定义错误页面
  • 我的Web API,用于提供默认的错误响应(包含异常和堆栈跟踪的json/xml)

  • 在我的MVC站点的web.config中,我有一个httpErrors节点,并将errorMode设置为“Custom”,以便在404s/500s/etc时可以看到漂亮的错误页面。在MVC网站浏览期间发生:
    <httpErrors errorMode="Custom" existingResponse="Replace">
    <remove statusCode="404" subStatusCode="-1" />
    <remove statusCode="500" subStatusCode="-1" />
    <remove statusCode="403" subStatusCode="-1" />
    <error prefixLanguageFilePath="" statusCode="404" path="Content\notfound.htm" responseMode="File" />
    <error statusCode="500" path="/Errors" responseMode="ExecuteURL" />
    <error statusCode="403" path="/Errors/Http403" responseMode="ExecuteURL" /></httpErrors>

    但是,使用该配置,当发生错误时,API将为自定义错误页面提供服务,而不是具有异常/堆栈跟踪的json/xml(这是所需的行为)。

    有没有一种方法可以将自定义错误配置为仅适用于我的MVC网站而不适用于Web API?该博客说没有( http://blog.kristandyson.com/2012/11/iis-httperrors-aspnet-web-api-fully.html),但是我想听听自该博客发布以来是否有人找到了解决方法。

    我想如果没有的话,我可以为我的Web API项目创建一个单独的项目/程序集。那将允许我分别为MVC和Web API配置httpErrors,但是我不希望仅创建另一个web.config来创建另一个项目。

    最佳答案

    好吧,在让这个问题腌制了将近一年之后,我又给了另一个机会。这是使我得到想要的东西的web.config魔术:

    <!-- inside of <configuration> to allow error
    responses from requests to /api through -->
    <location path="api">
    <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough" >
    <clear/>
    </httpErrors>
    </system.webServer>
    </location>

    <!-- original httpErrors, inside of <location path="." inheritInChildApplications="false">
    to serve custom error pages when the MVC site returns an error code -->
    <httpErrors errorMode="Custom" existingResponse="Replace">
    <remove statusCode="400" subStatusCode="-1" />
    <remove statusCode="404" subStatusCode="-1" />
    <remove statusCode="500" subStatusCode="-1" />
    <remove statusCode="403" subStatusCode="-1" />
    <error statusCode="400" prefixLanguageFilePath="" path="Content\notfound.htm" responseMode="File"/>
    <error prefixLanguageFilePath="" statusCode="404" path="Content\notfound.htm" responseMode="File" />
    <error statusCode="500" path="/errors" responseMode="ExecuteURL" />
    <error statusCode="403" path="/errors/http403" responseMode="ExecuteURL" />
    </httpErrors>

    问题的症结在于, <location>节点允许您覆盖在不太具体的路径上进行的设置。因此,尽管我们为path =“。”设置了errorMode =“Custom”,但我们使用 <location path="api">节点以及其中的httpErrors配置覆盖了我们的Web API路径。

    我以前见过节点,但是直到现在我才意识到这是他们的目的。本文对IIS/.NET的配置继承模型进行了更详细的介绍,我发现它非常有用: http://weblogs.asp.net/jongalloway/10-things-asp-net-developers-should-know-about-web-config-inheritance-and-overrides

    关于asp.net-mvc - 是否可以在MVC网站上使用自定义错误页面,但不能在Web API上使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18858925/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com