首页 / C# / c# – 带布局的自定义错误页面
c# – 带布局的自定义错误页面
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 带布局的自定义错误页面,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3958字,纯文字阅读大概需要6分钟。
内容图文
我一直在努力让自定义错误页面工作,并继续寻找回到简单使用静态页面的方法.虽然静态页面有效,但它需要重新构建我们希望在此时避免的导航栏.我目前正在使用以下内容指定自定义错误页面.
Asp.net错误处理
<customErrors mode="On" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="~/404.aspx"/>
</customErrors>
IIS错误处理
<httpErrors errorMode="Custom">
<remove statusCode="404"/>
<error statusCode="404" path="/404.html" responseMode="File"/>
</httpErrors>
有没有一种方法可以实现动态自定义错误页面,可以处理IIS错误和Asp.net错误?
最佳答案:
我在ASP.Net MVC项目中解决了同样的问题,通过处理程序通过.Net管理所有内容.
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*.*" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*.*" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*.*" verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
首先创建一个ErrorController来处理请求错误而没有找到像.
[AllowAnonymous]
public class ErrorController : Controller {
// GET: Error
public ActionResult NotFound() {
Response.StatusCode = (int)System.Net.HttpStatusCode.NotFound;
Response.TrySkipIisCustomErrors = true;
HttpContext.Response.StatusCode = (int)System.Net.HttpStatusCode.NotFound;
HttpContext.Response.TrySkipIisCustomErrors = true;
return View();
}
public ActionResult Error() {
Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
Response.TrySkipIisCustomErrors = true;
return View();
}
}
您会注意到我调用TrySkipIisCustomErrors来尝试避免IIS错误
然后创建一个基本控制器来处理将映射到ErrorController.NotFound操作的所有未知操作.
public abstract class FrontOfficeControllerBase : Controller {
protected override void HandleUnknownAction(string actionName) {
var data = ViewData;
//Custom code to resolve the view.
//ViewResult view = this.View<ErrorController>(c => c.NotFound());
//Manually create view with view Data
ViewResult view = new ViewResult();
view.ViewData = new ViewDataDictionary();
view.ViewData["controller"] = "Error";
view.ViewData["action"] = "NotFound";
if (data != null && data.Count > 0) {
data.ToList().ForEach(view.ViewData.Add);
}
Response.StatusCode = (int)System.Net.HttpStatusCode.NotFound;
Response.TrySkipIisCustomErrors = true;
view.ExecuteResult(this.ControllerContext);
}
}
所有控制器都将从此基本控制器继承.
在所有其他路线之后配置了捕获所有路线.
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" }
);
routes.MapRoute(
name: "CatchAll",
url: "{*any}",
defaults: new { controller = "Error", action = "NotFound" });
这确保了如果路由与我的任何控制器都不匹配,它将安全地路由到ErrorController.NotFound操作.
对于视图,我在Views / Shared文件夹中创建了相应的NotFound.shtml和Error.cshtml页面,并且他们从访问根布局中受益,这是我认为您正在寻找的.
最后,我能够从web.config中删除customErrors和httpErrors,因为不再需要它们,因为每个请求都由处理程序管理并相应地路由.
这个结构的最初想法来自这篇文章,在这篇文章中我混合并匹配了可用的选项,直到我找到了一个适合我需要的解决方案.
Exception handling in ASP.NET MVC (6 methods explained)
希望这可以帮助.
内容总结
以上是互联网集市为您收集整理的c# – 带布局的自定义错误页面全部内容,希望文章能够帮你解决c# – 带布局的自定义错误页面所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。