当前位置: 首页 > 知识库问答 >
问题:

是否可以将自定义错误页用于 MVC 站点,但不能用于 Web API?

陶宜民
2023-03-14

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

    < li >我的MVC站点在发生错误时提供自定义错误页面 < li >我的Web API提供默认错误响应(包含异常和堆栈跟踪的JSON/XML)

在我的MVC站点的web.config中,我有一个http错误节点,并将errorMode设置为“自定义”,以便在浏览MVC站点期间发生404s/500s/等时可以有漂亮的错误页面:

<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。要配置的配置。

共有3个答案

仲孙超
2023-03-14

什么对我有效

<httpErrors existingResponse="Auto" defaultResponseMode="Redirect" errorMode="Custom">
  <remove statusCode="403" subStatusCode="-1" />
  <error statusCode="403" subStatusCode="-1" responseMode="Redirect" path="<!--path here-->" />
  <remove statusCode="404" subStatusCode="-1" />
  <error statusCode="404" subStatusCode="-1" responseMode="Redirect" path="<!--path here-->" />
  <remove statusCode="500" subStatusCode="-1" />
  <error statusCode="500" subStatusCode="-1" responseMode="Redirect" path="<!--path here-->" />
</httpErrors>

似乎只需设置现有响应=“自动”即可完成这项工作。

裴和怡
2023-03-14

我还没有测试过这个,但是如何编写代码来处理您的MVC应用程序错误,就像这里显示的那样 http://thirteendaysaweek.com/2012/09/25/custom-error-page-with-asp-net-mvc-4/?

他的代码表明,他是在应用程序级别(Global.asax)执行此操作的,但我猜您也可以同样的方式在较低级别捕获异常,一种方法用于MVC,另一种用于Web API。

容学林
2023-03-14

好吧,在让这个问题腌制了将近一年之后,我又试了一次。这是 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>

这里所发生的事情的关键在于< code >

我以前见过节点,但直到现在我才明白这是它们的目的。本文将更详细地介绍IIS/的配置继承模型。NET,我发现它非常有用:http://weblogs . ASP . NET/jongalloway/10-things-ASP-NET-developers-should-know-about-we B- config-inheritance-and-overrides

 类似资料:
  • Google API是否可以同时用于自定义域Google帐户和gmail帐户 我对此做了一些研究,发现有两种类型的Google API,一种是简单的Google API,另一种是Google Domain API 我想使用谷歌api,这样我就可以验证工作人员的电子邮件,无论他们是Gmail用户还是谷歌商业账户持有人 我对这两个API感到困惑,我想知道Google API是只支持gmail帐户,还是

  • 阅读文档时,并不十分清楚。 我想要的是能够存储和检索简单的json文档。使用CloudSearch,似乎可以以SDF格式存储文档,然后搜索它们,但它只返回文档ID和指定字段的一小部分(我认为是200个字符)。 有没有一种方法来检索完整的文档ID只是使用CloudSearch?还是打算作为搜索和使用主存储服务的附加工具?

  • 问题内容: 我有一些需要经常打印的结构。现在,我正在围绕该结构使用经典的打印包装器: 此功能很方便,但实际上也很有限。如果不进行新包装,则无法添加或添加一些文本。我知道我可以使用 va_arg 系列添加或添加一些文本,但是我觉得我会重新实现。 我想知道是否有可能向printf编写自定义函数。我希望能够写这样的东西: 这可能吗 ?我怎样才能做到这一点 ? 注意:我在Ubuntu Linux 10.0

  • 根据文档:https://kotlinlang.org/docs/reference/annotations.html 您可以将多个注释应用于单个站点使用目标,但是否有方法将同一注释应用于多个站点使用目标? 我的用例是用SimpleXML的注释装饰类。要使用不可变的,您必须注释字段和构造函数参数: 对于有许多字段的数据类,您可以很容易地得到3倍于实际代码的注释,如果能消除重复就更好了。当您必须使用

  • 我是Android开发的新手 我试图在应用程序中创建自定义标题栏。它正在模拟器中工作。但是当我在我的设备上运行这个应用程序时…它停止了(没有加载) 自定义标题栏的 XML 代码 我的活动类中的代码 模拟器中没有问题...它在那里工作正常,但在真实设备中不起作用,如果有人请告诉我解决方案。

  • 问题内容: 今天,我在采访中面临一个问题。是否可以在Singleton类上应用继承概念?我说过,由于构造函数是私有的,因此我们无法扩展该Singleton类。 他问我的下一件事是将继承应用于该Singleton类。因此,我将Singleton的构造函数作为受保护对象,认为孩子的构造函数也已受到保护。但是我错了,孩子可以有一个等于或大于该值的修饰符。 因此,我请他在这种情况下举一个真实的例子。他没能