asp.net-mvc-routing – ASP.NET MVC区域:如何隐藏URL中的“区域”名称?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc-routing – ASP.NET MVC区域:如何隐藏URL中的“区域”名称?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当运行具有博客区域和博客控制器的 MVC 2 Areas example时,URL如下所示:

http://localhost:50526/Blog/Blog/ShowRecent格式:

RootUrl / AreaName / ControllerName / ActionName

刚刚发现MVC区域,它似乎是组织代码的好方法,即为每个部分创建一个区域,在我的情况下,每个部分都有自己的控制器.这意味着每个AreaName = ControllerName.这样做的效果是Url例如/ Blog / Blog /上面的双AreaName / ControllerName路径

没有对路由的完全清楚的了解,我如何设置路由不显示AreaName?

编辑:

我试图减少路由的工作量,因为它们似乎会相互影响(即需要特定的排序),并可能导致严重的头痛:-)在将现有的Webform应用转换为MVC时,我已经转换了几个核心部分,它们每个都有一个控制器和大量的视图/动作,尽管大多数数据访问是代码在组件中,Model / ViewData类的数量正在增长…我正在根模型/视图中创建子文件夹这些部分(或区域)的文件夹,并希望创建区域将以相同的方式工作,除了组织代码(使用覆盖该区域的基本路线)
对此有任何评论吗?

解决方法

在每个区域的文件夹中,您将看到一个* AreaName * AreaRegistration.cs文件.这是存储区域路线规则的地方.默认情况下,当它们生成时,它们将包含所有其他的区域名称.问题是:如果从路由中删除区域名称文件夹”,路由将捕获所有“标准”{controller} / { action} / {id}请求.这显然不是你想要的

要克服这一点,您可以根据该路由中存在的控制器名称,在路由上添加正则表达式过滤器.缺点?您将无法在应用程序中使用相同名称的两个控制器(至少不使用标准路由.您可以随时想到不同的路由来访问它们))

结束了这个结构:

/Areas
/Areas/Blog/Controllers/BlogController.cs
/Areas/Blog/Controllers/FeedController.cs
/Areas/User/Controllers/UserController.cs
/Controllers/PageController.cs

你应该是这样的:
在BlogAreaRegistration.cs中:

context.MapRoute(
    "Blog_default","{controller}/{action}/{id}",new { action = "Index",id = UrlParameter.Optional },new { controller = "(Blog|Feed)" }
);

在UserAreaRegistration.cs中:

context.MapRoute(
    "User_default",new { controller = "(User)" }
);

在Global.asax.cs中:

public static void RegisterRoutes(RouteCollection routes)
{
    context.MapRoute(
    "Default",new { controller = "Home",action = "Index",id = UrlParameter.Optional }
    );
}
protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterRoutes(RouteTable.Routes);
}

请注意,在global.asax地区注册首先!

猜你在找的asp.Net相关文章