asp.net-mvc – 如何将服务器错误的http状态代码捕获到ASP.NET M
我试图在ASP.NET MVC 4中实现一般自定义错误页面.
我基本上设置了一个错误布局,它定义了一个输出响应的http状态代码的部分. 我希望我的错误最终继承这样的布局的视图,并简单地添加一个来自其模型的消息,该消息被实例化并传递给Controller中的View()调用(名为“Error”)我设置在web.config中处理自定义错误. <customErrors defaultRedirect="/Error" mode="On"> </customErrors> 自定义错误控制器: public class ErrorController : Controller { public ActionResult Index() { return View(new CustomErrorViewModel(Response.Status)); } } 自定义错误视图: @{ Layout = "~/Views/Shared/_CustomErrorLayout.cshtml"; } @using System.Web.Configuration; @using System.Configuration; @using MVC_Tests.Models; @model CustomErrorViewModel @section HttpCode { @Response.StatusCode } @Model.Status 布局是: <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title></title> <link href="~/Content/CustomError.css" rel="stylesheet" /> </head> <body> <div id="divError"> <h1> <span>Error </span> @RenderSection("HttpCode") </h1> <div id="divErrorMessage"> <p>@RenderBody()</p> </div> </div> </body> </html> 我试图处理的错误是一个简单的除零,我添加到Home Index操作.请注意,我想要一个视图来处理不同的服务器http状态错误代码(500系列).我知道每个不同的http状态代码都有不同的视图,我在一个视图之后处理多个代码. 自定义错误处理正在运行,我在所需的视图中结束 – 但是 – 如上所述,我希望输出错误的http状态代码. 1.首先,在将除法绊倒时,会产生异常. 2.现在进行重定向,由于我的web.config指令以自定义方式处理错误(因为在web.config中没有指定特定的http状态代码,我在同一控制器/视图中处理每个http状态错误代码( “/错误”).这里至关重要的是重定向是一个新请求. 3.来自步骤2的重定向将我发送到错误控制器,然后它将我发送到其视图,该视图将被渲染. 4.在渲染视图时,http状态代码插入布局定义部分,我的自定义消息被添加,http状态代码部分的输出如我所说:200(OK).为什么,如果强行抛出500服务器端错误?因为,如果我没有错,视图将在不同的请求管道中呈现,重定向,并且在重定向时 – 不会发生错误 – 我最终得到200(OK)状态响应. 我在Dino Esposito上发表了关于在asp.net mvc中处理错误的this帖子,但是我不想在所有应用程序的控制器中添加过滤器(OnException和HandleError属性解决方案)(我可以创建一个具有这种过滤器的新基本控制器,并使所有其他人继承它,但这也需要更改所有控制器类).他提到的最后一种方法(处理global.asax的Application_Error事件)我不确定是否可以实现此目的 – 我必须在处理程序中发出重定向“Response.Redirect”语句,这超出了能够设置自定义页面的灵活性在web.config中(我仍然可以重定向到web.config中定义的路由,但我想知道这对于看起来如此简单的事情来说是不是太麻烦了). 将响应的任何服务器错误的http状态代码捕获到我的自定义错误视图中的最佳方法是什么? 解决方法
如果您正在使用IIS7,我会禁用“customerrors”,如下所示:
<customErrors mode="Off" /> 并像这样使用httpErrors: <system.webServer> <httpErrors errorMode="DetailedLocalOnly" existingResponse="Replace" defaultPath="/error"> <remove statusCode="404" /> <error statusCode="404" path="/error/notfound" responseMode="ExecuteURL" /> </httpErrors> .... 这允许您使用控制器中的以下内容获取显示404状态代码的非URL更改错误页面: public class ErrorController : Controller { public ActionResult notfound() { Response.TrySkipIisCustomErrors = true; Response.StatusCode = (int)HttpStatusCode.NotFound; return View("OneErrorViewToRuleThemAll"); } } PS. “errorMode”需要更改为“Custom”才能在本地查看….根据您的本地设置(即如果您使用的是IISExpress),在上传到实时服务器之前,您可能看不到正确的错误. PPS.您可以使用单个视图“OneErrorViewToRuleThemAll”来处理您决定以这种方式处理的任何状态代码的屏幕输出.每个ErrorController Action都会以此视图结束. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – Web部署项目AfterBuild路径问题
- asp.net-web-api – 在Windows服务中使用OWIN托管WebAPI
- asp.net-mvc-4 – 覆盖用于MVC4应用程序的User.IsInRole和[
- asp.net – 无Cookie属性web.config
- asp.net-mvc – 有没有办法向动作发送可选参数?
- asp.net-mvc – 如何在ASP.Net Identity上获取OWIN上下文?
- asp.net – 太多的Cookie OpenIdConnect.nonce导致错误页面
- ASP.Net MVC 3应用程序在应用程序池回收时随机失败
- asp.net-mvc – MVC5将项目添加到列表中
- asp.net – 无法访问已关闭的文件
- asp.net-mvc-3 – 如何验证HTML输入以防止XSS?
- .net – 单个配置密钥的多个值
- asp.net-mvc – MVC 5捆绑和Azure CDN(查询字符串
- asp.net-mvc – 在OWIN登录上检索用户的Facebook
- asp.net – 在javascript中读取cookie
- asp.net – 在jQuery $.post上缓存MVC 4 Partial
- asp.net – 使用GhostScript将PDF转换为服务器上
- asp.net-mvc – ASP.NET MVC:Uri到可用的路由数
- asp.net – IIS 7的最大默认POST请求大小 – 如何
- asp.net – 如何为我的网站关闭IIS中的自定义错误