为任何URL设置ASP.NET MVC 4路由

时间:2014-01-15 16:55:04

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

我目前在ASP.NET MVC 4中设置路由时遇到问题。

我正在尝试构建能够添加自定义路由页面的系统。 例如,用户可以添加新页面并将其URL设置为/about-us,并且每个创建的页面都应该使用参数URL执行PagesController操作GetPage

我尝试在默认网址中对默认设置进行评论,然后我设置{*url}以转到new { controller = "Pages", action = "GetPage", url = UrlParameter.Optional },此接缝正常,但当我尝试使用{{1}获取操作链接时我得到了例外。

我还设法解决了最后添加@Url.ActionLInk("Index", "Home")路由的问题,但现在我遇到了包含{*url}等多个参数的网址的问题。在请求网址时,我获得了异常/company/about-us,我知道这是因为我的路由包含网址:The resource cannot be found

因此有一个解决方案可以将这些URL连接到我的控制器,然后使用Error Handler for 404处理它。

这是我当前的{controller}/{action}文件:

RouteConfig.cs

3 个答案:

答案 0 :(得分:0)

执行此操作的方法是像您一样拥有一个包含所有路径,然后将url作为参数传递给GetPage方法,并使用它来加载和提供动态内容。

关于{controller}/{action}路线,这是优先的,因为它在之前显示你的全能路线。如果要支持预定义页面和自定义页面,则需要在URL中具有唯一标识符,例如路径上的前缀。也许如果您希望将所有公司路线静态地提供给/ company / xxx,请创建一条路线:

routes.MapRoute(
    name: "Company Pages",
    url: "company/{action}"
    defaults: new { controller = "Company" }
);

答案 1 :(得分:0)

@Url.actionlink根据Routeconfig中定义的路由创建链接。所以...如果你唯一关心的是那个链接,你可以使用html.actionlink or html.routelink,你可以直接给出路由名称..如回答,如果你想要所有的匿名呼叫重定向到单个控制器那么你可以使用 David Haney 的解决方案,您也可以使用约束...如果仍然满足您的需求那么您可以使用custommvchandler

http://beletsky.net/2011/06/inside-aspnet-mvc-route-to-mvchanlder.html https://www.simple-talk.com/dotnet/.net-framework/asp.net-mvc-routing-extensibility/ http://geekswithblogs.net/sankarsan/archive/2009/01/18/developing-custom-routehandler.aspx

答案 2 :(得分:0)

听起来你正在创建某种“CMS”工具。

您应该创建自定义路由处理程序。

在那个路由处理程序中,你做了一个简单的检查,看看你是否有任何带有当前url的Pages,如果这样,请将RequestContexts Controller和Action属性更新为Pagecontroller和你想要的Action,你也可以传递页面id那你就完蛋了。

在这篇文章中查看我的回答。 Database selection before routing in ASP.Net MVC

希望这有帮助!