asp.net-mvc-3 – 从根请求调用区域控制器
我的ASP.NET MVC3应用程序中有一些区域:
namespace MyProject.Areas.myarea { public class myareaAreaRegistration : AreaRegistration { public override string AreaName { get { return "myarea"; } } public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "myarea_default","myarea/{controller}/{action}/{id}",new { action = "Index",id = UrlParameter.Optional } ); } } } 这个区域包含“Hello”控制器,带有“Smile”动作. 在整个项目的global.asax文件中,我有: public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default","{controller}/{action}/{id}",new { controller = "Home",action = "Index",id = UrlParameter.Optional } ); } protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); } 所以,当我请求“localhost / myarea / hello / smile”时,它按预期调用适当的控制器. 但!当我请求“localhost / hello / smile”时,它会调用hello控制器STILL!有了它,它会查找不在myarea / Views文件夹中的视图,而是在?/ Views文件夹中查找项目的“root”(非区域)级别. 我该如何修复此问题,因此服务器将抛出404异常,找不到该资源,就像我请求不存在的控制器一样? UPD:区域中的控制器位于命名空间中: namespace MyProject.Areas.myarea.Controllers { public class HelloController : Controller ... } “root”-level中的控制器位于命名空间中: namespace MyProject.Controllers { public class AnotherRootController : Controller ... } 所以我在global.asax中试过这个: public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default",id = UrlParameter.Optional },new [] { "MyProject.Controllers" } //Namespace ); } 我认为这会将此路由限制为“root”级控制器,因为它们位于MyProject.Controllers命名空间中.那不行.区域控制器仍在使用请求进行调用,但不包含其中的任何名称. 可能有人可以解释,为什么? 解决方法
在Global.asax中注册默认路由时,可以通过将其限制为仅查找给定命名空间中的控制器来设置UseNamespaceFallback = false数据语句.你可以看看
following blog post.
因此,要将其付诸实践,请为您的区域注册添加命名空间限制: public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "myarea_default",new[] { "MyProject.Areas.myarea.Controllers" } ); } 并且在注册默认路由时,在Global.asax中将UseNamespaceFallback数据标记设置为false,以便将其约束到给定的命名空间: public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default",new[] { "MyProject.Controllers" } ).DataTokens["UseNamespaceFallback"] = false; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – Request.ServerVariables [“REMOTE_ADDR”]和R
- asp.net-mvc – 在模型验证之前获取Filter以执行
- asp.net – 对数据绑定集合或对象列表时对gridview进行排序
- asp.net网站的“网站正在建设中”页面
- asp.net-mvc – ELMAH – 使用自定义错误页面收集用户反馈
- asp.net – 隐藏字段vs viewstate
- asp.net-mvc – 具有错误的剃刀语法编译时不应该编译
- asp.net-mvc – 用于ASP.NET MVC的Spark T4模板
- asp.net mvc c#tooltip
- asp.net-core – 无法加载DLL’api-ms-win-core-registry-l
- 赋予ASP.NET Web应用程序网络服务帐户读/写权限的
- ASP.NET页面上的多个表单
- asp.net-core – 重定向登录到Controller Action
- asp.net-mvc – 检测到潜在的危险Request.Form值
- asp.net-mvc – 具有MasterPage的视图上的多个An
- asp.net – 实体框架与存储过程
- asp.net-mvc-3 – 在MVC视图中使用条件编译符号
- 在ASP.Net Cookie或会话状态中存储会话信息?
- asp.net-mvc – 以任何方式配置配置visual studi
- asp.net-mvc – 如何在ASP.NET Razor MVC4视图中