我想知道为什么友好的URL是从一个动作而不是另一个动作生成的。
让我告诉你!
[RoutePrefix("fr-ca/guest")]
public class GuestController : BaseController
{
[Route("users/{id:int}/{ids:int}")]
public ActionResult Index(int id, int ids)
{
return View();
}
[Route("register/{id:int}/{ids:int}")]
public ActionResult Register(int id, int ids)
{
return View();
}
}
为了获得友好的URL结果,我使用Razor:
@Html.ActionLink("some text", "Index", "Guest", new { id = 1, ids = 1 }, null)
@Html.ActionLink("some other text", "Register", "Guest", new { id = 1, ids = 1 }, null)
在路线配置文件中,我添加了这一行:routes.MapMvcAttributeRoutes();
所以第一次正常工作,我得到 http:... / fr-ca / guest / users / 1/1 但第二个不起作用!我得到 http:... / fr-ca / guest / register?id = 1& ids = 1
任何人都可以提供帮助吗?
谢谢!
大卫
答案 0 :(得分:1)
假设您没有任何与此相冲突的其他路线定义,
@Html.ActionLink("some other text", "Register", "Guest", new { id = 1, ids = 1 }, null)
会生成href值为http://yoursitename/fr-ca/guest/register/1/1
的锚标记,而不是http:.../fr-ca/guest/register?id=1&ids=1
由于您已将模式指定为register/{id:int}/{ids:int}
它应该适用于register/1/1
网址,但不适用于/register?id=1&ids=2
。这是预期的行为。
答案 1 :(得分:0)
您可以使用Html.ActionLink
而不是Html.RouteLink
。此帮助程序具有重载,该重载采用要使用的路由的名称。您必须在路线中添加名称:
在您的控制器中:
[Route("register/{id:int}/{ids:int}", Name="GuestRegister")]
public ActionResult Register(int id, int ids)
{
return View();
}
在您看来:
@Html.RouteLink("some other text", "GuestRegister", new { id = 1, ids = 1 }, null)
这导致:
http://.../fr-ca/guest/register/1/1