Gau*_*123 8 asp.net-mvc exception-handling
我已经实现了下面链接中提到的异常处理
它工作正常.但我有要求处理404 Error.
我怎样才能做到这一点?
如果我使用下面的代码,
<customErrors mode="On">
<error statusCode="404" redirect="/Home/Error"></error>
</customErrors>
Run Code Online (Sandbox Code Playgroud)
404发生任何错误时都能正常工作.但是如果发生任何其他异常,那么我的error.cshtml调用两次并显示相同的异常two times.
Nko*_*osi 10
web.config中
关闭system.web中的自定义错误
<system.web>
<customErrors mode="Off" />
</system.web>
Run Code Online (Sandbox Code Playgroud)
在system.webServer中配置http错误
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Auto">
<clear />
<error statusCode="404" responseMode="ExecuteURL" path="/NotFound" />
<error statusCode="500" responseMode="ExecuteURL" path="/Error" />
</httpErrors>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
创建简单的错误控制器来处理这些请求ErrorContoller.cs
[AllowAnonymous]
public class ErrorController : Controller {
// GET: Error
public ActionResult NotFound() {
var statusCode = (int)System.Net.HttpStatusCode.NotFound;
Response.StatusCode = statusCode;
Response.TrySkipIisCustomErrors = true;
HttpContext.Response.StatusCode = statusCode;
HttpContext.Response.TrySkipIisCustomErrors = true;
return View();
}
public ActionResult Error() {
Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
Response.TrySkipIisCustomErrors = true;
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
配置路由RouteConfig.cs
public static void RegisterRoutes(RouteCollection routes) {
//...other routes
routes.MapRoute(
name: "404-NotFound",
url: "NotFound",
defaults: new { controller = "Error", action = "NotFound" }
);
routes.MapRoute(
name: "500-Error",
url: "Error",
defaults: new { controller = "Error", action = "Error" }
);
//..other routes
//I also put a catch all mapping as last route
//Catch All InValid (NotFound) Routes
routes.MapRoute(
name: "NotFound",
url: "{*url}",
defaults: new { controller = "Error", action = "NotFound" }
);
}
Run Code Online (Sandbox Code Playgroud)
最后确保您拥有控制器操作的视图
Views/Shared/NotFound.cshtml
Views/Shared/Error.cshtml
Run Code Online (Sandbox Code Playgroud)
如果您要处理任何其他错误,可以按照该模式添加并根据需要添加.这将避免重定向并保持引发的原始http错误状态.
| 归档时间: |
|
| 查看次数: |
6598 次 |
| 最近记录: |