ASP.Net路由问题

时间:2017-05-23 20:44:34

标签: asp.net-mvc asp.net-mvc-routing

我对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}吗?

1 个答案:

答案 0 :(得分:0)

好的,所以解决方案非常简单。感谢NightOwl888的帮助。

一个是用户名将始终采用&#34; word.word&#34;的格式。动作永远不会有这段时间,因此我可以使用正则表达式来检查并相应地路由。

其次,可以设置特定的行动路线。假设我有两个不同的控制器,但我仍然希望拥有相同的功能。如果没有url中的控制器,MVC就无法自动知道我指向的控制器。

所以我找到的解决方案是为Actions制定具体路线。

因此,如果我有一个名为Resources的动作,并且它在名为NotHome的控制器中,我可以使我的路线看起来像这样:

routes.MapRoute(
    "Resources",
    "{username}/Resources",
    new { controller = "NotHome", action = "Resources"}
);

所以现在每当我输入任何/资源时,它都会触及该路径。