C# MVC 5错误处理Web.Config自定义错误
我正在探索不同类型的错误处理,并尝试设置一些自己的错误处理 我的第一次尝试是在web.config文件中使用customErrors部分。我已经设置了两个错误部分。一个用于404错误,另一个用于403错误。在我的一个控制器中,我设置了C# MVC 5错误处理Web.Config自定义错误,c#,asp.net-mvc,error-handling,web-config,C#,Asp.net Mvc,Error Handling,Web Config,我正在探索不同类型的错误处理,并尝试设置一些自己的错误处理 我的第一次尝试是在web.config文件中使用customErrors部分。我已经设置了两个错误部分。一个用于404错误,另一个用于403错误。在我的一个控制器中,我设置了Response.StatusCode=404和邮递员收到404状态。然而,我的页面被打开了,并且状态从未被捕获 也许我错过了什么。下面是我的样本 控制器: public ActionResult PostAuditReport() { Respon
Response.StatusCode=404代码>和邮递员收到404状态。然而,我的页面被打开了,并且状态从未被捕获
也许我错过了什么。下面是我的样本
控制器:
public ActionResult PostAuditReport()
{
Response.StatusCode = 404;
return View(new PostAuditReportMessage { stage_directory = "PostAuditReport" });
}
Web.Config:
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/Error/Error.cshtml">
<error statusCode="404" redirect="~/Error/NotFound"/>
<error statusCode="403" redirect="~/Error/BadRequest"/>
</customErrors>
您正在将响应的statuscode设置为404,但仍将视图作为响应。尝试使用异常导致404错误:
throw new HttpException(404, "Not Found");
使用此选项,您将导致代码的执行停止,并出现404错误,该错误将由errorhandling接收。(在本例中,在web.config中)
上面的代码按它应该的方式工作。它为PostAuditReport的视图提供状态代码404,而不是200。如果要为404视图提供自定义消息,则需要以下内容-
Global.asax.cs
诀窍是不要对404-NotFound使用重定向,以避免往返
以下代码将呈现404的NotFound视图,同时在浏览器中维护原始URL
protected void Application_Error(object sender, EventArgs e)
{
var exception = Server.GetLastError();
// Log exception to database if you want to.
// Process 404 HTTP errors
var httpException = exception as HttpException;
if (httpException != null && httpException.GetHttpCode() == 404)
{
Response.Clear();
Server.ClearError();
Response.TrySkipIisCustomErrors = true;
IController controller = new ErrorController();
var routeData = new RouteData();
routeData.Values.Add("controller", "Error");
routeData.Values.Add("action", "NotFound");
var requestContext = new RequestContext(
new HttpContextWrapper(Context), routeData);
controller.Execute(requestContext);
}
}
误差控制器
您需要为以下操作方法创建单独的视图
public class ErrorController : Controller
{
[AllowAnonymous]
public ActionResult BadRequest()
{
Response.StatusCode = 403;
Response.TrySkipIisCustomErrors = true;
return View();
}
[AllowAnonymous]
public ActionResult NotFound()
{
Response.StatusCode = 404;
Response.TrySkipIisCustomErrors = true;
return View();
}
[AllowAnonymous]
public ActionResult Error()
{
Response.StatusCode = 503;
Response.TrySkipIisCustomErrors = true;
return View();
}
}
*仅供参考:您无法指向Error.cshtml。默认情况下,由于安全原因,IIS不会提供.cshtml服务
应该是这样的-
<customErrors defaultRedirect="~/Error/Error" mode="On">
<error statusCode="404" redirect="~/Error/NotFound"/>
<error statusCode="403" redirect="~/Error/BadRequest"/>
</customErrors>
现在确实会引发404异常,但我的web.config没有发现异常。我得调查一下。谢谢。我喜欢这个答案,因为我更喜欢使用应用程序错误来处理全局错误。谢谢你提供的信息。
<customErrors defaultRedirect="~/Error/Error" mode="On">
<error statusCode="404" redirect="~/Error/NotFound"/>
<error statusCode="403" redirect="~/Error/BadRequest"/>
</customErrors>