我目前在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
答案 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
希望这有帮助!