我对MVC很新,而且我环顾四周,没有任何东西完全满足我的需求。
以下是我希望设置路线的方法:
domain/{action}
domain/{username}/{action}
domain/{username}
(用户名代替id) 所有三个都使用相同的控制器。
如果我输入全部三个,它应该为我加载页面
这是我原来的。它不起作用。我有URL.Action方法为我创建链接,他们不能正确创建它们。我尝试切换订单,但问题仍然存在,这意味着我在概念上遗漏了有关路由的内容。
这是我最初拥有的
routes.MapRoute(
"WithUsername","{username}",
new { controller = "Home", action = "Landing"}
);
routes.MapRoute(
"WithOutUsername",
"{action}",
new { controller = "Home", action = "Landing"}
);
routes.MapRoute(
"Default",
"{username}/{action}",
new {controller = "Home", action = "Landing"}
);
有人能引导我朝着正确的方向前进吗?
以下是关于链接如何搞砸的示例。我们说我点击Url带我去学习资源。 URL.Action指向学习资源操作。没有重复的名称。
这是URL.Action
<a href="@Url.Action(title.actionName, title.controllerName, new {Model.username})">@title.name</a>
而不是得到这个
domain/LearningResources
我明白了
domain/LearningResources?username=LearningResources
不知何故,它检测到LearningResources作为用户名,即使没有用户名。我的所有操作都将username作为可选参数(设置为字符串username =&#34;&#34;),因此似乎对什么是用户名以及什么是操作感到困惑,因为如果我输入URL手动按预期工作。
如果我最初只使用域名作为我的地址,它似乎也只是搞乱了。如果我从domain / {action}或domain / {username}开始,所有链接都会相应地工作。
修复方法是将域重新路由为始终为域/ {action}吗?
答案 0 :(得分:0)
好的,所以解决方案非常简单。感谢NightOwl888的帮助。
一个是用户名将始终采用&#34; word.word&#34;的格式。动作永远不会有这段时间,因此我可以使用正则表达式来检查并相应地路由。
其次,可以设置特定的行动路线。假设我有两个不同的控制器,但我仍然希望拥有相同的功能。如果没有url中的控制器,MVC就无法自动知道我指向的控制器。
所以我找到的解决方案是为Actions制定具体路线。
因此,如果我有一个名为Resources的动作,并且它在名为NotHome的控制器中,我可以使我的路线看起来像这样:
routes.MapRoute(
"Resources",
"{username}/Resources",
new { controller = "NotHome", action = "Resources"}
);
所以现在每当我输入任何/资源时,它都会触及该路径。