Asp.net MVC学习日记四(如果无法Route,指向自定义的错误页面)

本文介绍如何在ASP.NET MVC中实现自定义404错误页面的方法,包括通过修改默认路由处理未找到资源的情况,以及利用基控制器(BaseController)来统一处理未知动作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里面要分两种情况:一是,默认的Route无法匹配;二是,默认的Route匹配错误。

前提工作:

新建一个ErrorController

public class ErrorController : Controller
{
public ActionResult Http404()
{
return View();
}
}

再添加Http404.aspx

针对第一种情况:

1、在Models下新建MyControllerFactory类

public class MyControllerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext,Type controllerType)
{
try
{
return base.GetControllerInstance(requestContext,controllerType);
}
catch (HttpException ex)
{
int httpCode = ex.GetHttpCode();
if (httpCode == (int)HttpStatusCode.NotFound)
{
IController controller = new ErrorController();
((ErrorController)controller).Http404();
return controller;
}
else
{
throw ex;
}
}
}
}

2、在Global.asax文件Application_Start方法中,添加

ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());

那么http://localhost:1124/RandomController/RandomAction/RandomId会指定到自己的错误页面,但是http://localhost:1124/Homer/RandomAction/RandomId则不会。

那就要使用第二种情况了:

1、新建BaseController

public class BaseController : Controller
{
protected override void HandleUnknownAction(string actionName)
{
RouteTo404(HttpContext);
}
public ActionResult RouteTo404(HttpContextBase context)
{
IController errorController = new ErrorController();
RouteData rd = new RouteData();
rd.Values.Add("controller", "Error");
rd.Values.Add("action", "Http404");
errorController.Execute(new RequestContext(context, rd));
return new EmptyResult();
}
}

2、将现有的控制器把由继承自Controller改为BaseController

这样就ok了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值