【发布时间】:2016-10-03 13:13:10
【问题描述】:
我有一个项目,其中包含 both Web API 2 服务和 aspx 表单。但是我正在尝试设置错误处理,因此如果他们尝试在 url 中放入假页面,我可以将用户发送到 404 错误页面。当然,Web API 还需要将 400 状态消息发送回调用 Web 服务的用户,所以我试图保持两者的功能。主要问题是我不确定如何最好地设置 web.config,因为它不起作用。在我的项目中,我有一个 error.aspx 和 error404.aspx 页面。
在 web.config 文件中有这个:
<customErrors mode="RemoteOnly" defaultRedirect="~/error.aspx" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="~/error404.aspx"/>
</customErrors>
<!-- setting existingResponse="PassThrough" needed, otherwise web api 400 error messages will not return -->
<httpErrors existingResponse="PassThrough" errorMode="Custom">
<remove statusCode="404" subStatusCode="-1"/>
<error statusCode="404" prefixLanguageFilePath="" path="/myApp/error404.aspx" responseMode="ExecuteURL"/>
</httpErrors>
当我放入虚假页面时,我的应用将返回如下内容:http://myServer/myApp/fake.aspx
“/myApp”应用程序中的服务器错误。 运行时错误 描述:处理您的请求时发生异常。此外,在执行第一个异常的自定义错误页面时发生了另一个异常。请求已终止。
但是,如果我在 web.config 中进行更改,我可以显示 404 页面:<httpErrors existingResponse="Replace"
但是进行此更改会导致 Web API 400 状态代码消息 not 当我从
我的控制器的 get 函数:Return BadRequest("Your parameter is invalid") 但这些状态消息对于服务的使用者非常重要。
有什么想法可以设置项目以便让两个错误都显示吗? Setting <httpErrors existingResponse="Auto"
允许返回 Web API 错误,但不允许返回错误表单请求的 error404.aspx。
有一件事我想知道,如果 Global.asax 文件可能有帮助,如 here 所示,或者这样的过程是否可能?
【问题讨论】:
标签: asp.net error-handling asp.net-web-api2