ASP.NET MVC 3 中,自定义全局的错误处理页面
2011-04-07 15:49 音乐让我说 阅读(2606) 评论(7) 收藏 举报Global.asax 中
protected void Application_Error(object sender, EventArgs e)
{
if (!HttpContext.Current.IsCustomErrorEnabled)
{
return;
}
var exception = Server.GetLastError();
var httpException = new HttpException(null, exception);
var routeData = new RouteData();
routeData.Values.Add("controller", "Error");
routeData.Values.Add("action", "Index");
routeData.Values.Add("httpException", httpException);
Server.ClearError();
var errorController = ControllerBuilder.Current.GetControllerFactory().CreateController(
new RequestContext(new HttpContextWrapper(Context), routeData), "Error");
errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
}
然后创建ErrorController
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using NBlog.Web.Application;
using NBlog.Web.Application.Service;
namespace NBlog.Web.Controllers
{
public partial class ErrorController : LayoutController
{
public ErrorController(IServices services) : base(services) { }
public ActionResult Index()
{
var model = new ErrorModel();
var httpException = RouteData.Values["httpException"] as HttpException;
var httpCode = (httpException == null) ? 500 : httpException.GetHttpCode();
switch (httpCode)
{
case 403:
Response.StatusCode = 403;
model.Heading = "Forbidden";
model.Message = "You aren't authorised to access this page.";
break;
case 404:
Response.StatusCode = 404;
model.Heading = "Page not found";
model.Message = "We couldn't find the page you requested.";
break;
case 500:
default:
Response.StatusCode = 500;
model.Heading = "Error";
model.Message = "Sorry, something went wrong. It's been logged.";
break;
}
Response.TrySkipIisCustomErrors = true;
return View(model);
}
}
}
ErrorModels.cs
namespace MvcHandlerGlobalError.Models
{
public class ErrorModels
{
/// <summary>
/// 网页标题
/// </summary>
public string Heading { get; set; }
/// <summary>
/// 网页内容
/// </summary>
public string Message { get; set; }
}
}
最后注意要在 Web.config 中启用自定义错误
<!-- 启用自定义错误 -->
<customErrors mode="On">
</customErrors>
Index.cshtml
@model MvcHandlerGlobalError.Models.ErrorModels
@{
ViewBag.Title = Model.Heading;
}
<div>
<h1>@Model.Heading</h1>
<p>@Model.Message</p>
<p>@Html.ActionLink("Continue »", "Index", "Home")</p>
</div>
最后测试 ,输入一个不存在的 URL ,比如:http://localhost:2458/Home/MyAbout

谢谢浏览!
作者:音乐让我说(音乐让我说 - 博客园)
出处:http://music.cnblogs.com/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
浙公网安备 33010602011771号