asp.net-mvc – 为缺少的ASP.Net MVC控制器更正404消息
|
我有一个MVC 2应用程序,应该总是给出一个“漂亮的”404页面. 但是目前我得到了一个低级别.Net:“’/ sitename’应用程序中的服务器错误…” 我有一个基本控制器,它有一个NotFound动作,将呈现漂亮的404页面. 处理缺失的操作: protected override void HandleUnknownAction(string actionName)
{
this.NotFound(actionName).ExecuteResult(this.ControllerContext);
}
因此,访问{site} / ValidController / NotAnAction会被正确路由. 但是访问{site} / NotAController则没有. 我有设置的路线全部: routes.MapRoute(
"MVC routes","{controller}/{action}/{id}",new { action = "Index",id = UrlParameter.Optional });
routes.MapRoute(
"Catch All","{*url}",new { controller = "System",action = "NotFound" });
catch全部正确捕获不匹配的路由. 所以{site} / Invalid / Action / id / extra通过catch all正确路由. 但是{site} / Invalid通过“MVC路由”路由获取并且ASP.Net寻找InvalidController,并在找不到它时抛出一个哑异常. 我知道我可以在web.config级别覆盖它,但这只是重定向到页面.我想知道路由模式何时匹配但控制器不是有效的控制器名称. 我在哪里可以捕捉并改变这种行为? 解决方法我终于找到了答案,虽然它仍然不理想.您可以使用正则表达式限制允许匹配路由的控制器名称,因此如果我们假设控制器工厂的默认实现,我们可以找出所支持的所有可能的类名: // build up a list of known controllers,so that we don't let users hit ones that don't exist
var allMvcControllers =
from t in typeof(Global).Assembly.GetTypes()
where t != null &&
t.IsPublic &&
!t.IsAbstract &&
t.Name.EndsWith("Controller",StringComparison.OrdinalIgnoreCase) &&
typeof(IController).IsAssignableFrom(t)
select t.Name.Substring(0,t.Name.Length - 10);
// create a route constraint that requires the controller to be one of the reflected class names
var controllerConstraint = new
{
controller = "(" + string.Join("|",allMvcControllers.ToArray()) + ")"
};
// default MVC route
routes.MapRoute(
"MVC",id = UrlParameter.Optional },controllerConstraint);
// fall back route for unmatched patterns or invalid controller names
routes.MapRoute(
"Catch All",action = "NotFound" });
这不是理想的,它增加了应用程序启动的命中,但仍然感觉太复杂,但它确实具有所需的效果. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-web-api – 默认请求标头不接受任何值,它始终为nul
- asp.net-mvc – 向MVC 3添加基于声明的授权
- asp.net – AttachDbFilename的问题是什么
- asp.net-mvc-4 – 如何开发一个ASP.NET Web API接受一个复杂
- asp.net – 单元测试Web服务 – HttpContext
- asp.net-mvc – ASP.NET MVC是否有分页解决方案,在数据库中
- asp.net – 如何增加我的存储过程调用的超时时间(见错误)?
- asp.net-mvc – 如何使用Autofac将控制器的ModelState传递给
- asp.net-web-api – 使用WebAPI和RavenDB进行基本会话处理
- asp.net-mvc – TryUpdateModel的实例,ASP .NET MVC 3
- asp.net – MVC4在配置文件中查看缓存持续时间?
- asp.net-mvc – 如何将Bootstrap下拉式样应用于A
- asp.net汉字转拼音和获取汉字首字母的代码
- asp.net – 发布网站时,我的默认文档名称不断从I
- asp.net-mvc – 如果value为空,在razor模板上放置
- asp.net – 如何处理@RenderBody()?
- ASP.NET Web Forms 4.5模型绑定,其中模型包含一个
- asp.net – 如何在mvc中使用自定义成员身份添加更
- asp.net-mvc-3 – html.dropdownlist MVC3混乱
- asp.net – MVC 6 WebAPI返回序列化的HttpRespon
