【发布时间】:2018-06-28 14:54:01
【问题描述】:
要求
我有一个 ASP.Net MVC 应用程序,它与许多不同的库一起工作。与大多数库一样,各种函数调用可能会引发许多不同的异常之一。
目前,无论何时抛出任何异常,MVC 应用程序都会“处理”它们并将“内部服务器错误”(代码 500)返回给客户端(例如 Web 浏览器)。
这在大多数情况下都可以,但是,有一种特定的异常类型(在本例中为 UnauthorizedAccessException)我希望在响应中发送“未经授权”(代码 401)状态,而不是通常的 500 错误。
当前尝试
我做了一些研究,看起来“捕获”所有异常并处理它们的方法是使用Application_Error 方法。所以我在MvcApplication 类中尝试了Application_Error 的以下实现:
protected void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if(ex is UnauthorizedAccessException)
{
Response.StatusCode = (int)System.Net.HttpStatusCode.Unauthorized;
}
}
问题
这里的问题是,虽然我可以调试并看到 Response.StatusCode 被设置为 401,但客户端/浏览器仍然收到 500 错误。
我认为发生这种情况有一个很好的理由,但我已经用尽了我的大脑来思考可以为我提供所需答案的搜索词。
问题
简而言之,我需要做什么才能获得我正在寻找的行为?
有关其他信息,我最终想要的是 UnauthorizedAccessException 具有与 MVC 处理未经身份验证的请求(重定向到登录页面)相同的行为。但是,我还需要它来处理 AJAX 请求,因为我的 javascript 可以检查 401 错误并执行一些特定的逻辑(在这种情况下,重定向到登录页面的响应不可行)
【问题讨论】:
标签: c# asp.net-mvc exception-handling httpresponse