我希望设置简单的路由,以便{controller} / {id}将默认为{controller} / details / {id}。我已经在这篇文章中进行了设置:ASP.NET MVC 4路由-controller / id vs controller / action / id
但是那篇文章暗示了工作的路线,我将需要int{id}值。我们使用Guid ID。
这是我所拥有的:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.LowercaseUrls = true;
routes.MapMvcAttributeRoutes();
routes.MapRoute
(
name: "Detail",
url: "{controller}/{id}",
defaults: new { action = "Details", id = UrlParameter.Optional }
);
routes.MapRoute
(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Submission", action = "Index", id = UrlParameter.Optional }
);
}
}
Run Code Online (Sandbox Code Playgroud)
我可以使用Guid身份证吗?
当前路由定义的问题是,它可以满足您的特定请求,但会破坏现有的默认路由,当您尝试访问时Home/About,它将带您到Home!的Details动作。
为了解决这个问题,您可以做的是传递一个路由约束,您可以在其中传递正则表达式Guid。
这应该工作正常。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute
(
name: "Detail",
url: "{controller}/{id}",
defaults: new { action = "Details", id = UrlParameter.Optional },
constraints: new { id = "[A-Z0-9]{8}-([A-Z0-9]{4}-){3}[A-Z0-9]{12}" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
Run Code Online (Sandbox Code Playgroud)
并将您的操作方法参数类型更改为Guid。
public class ProjectController : Controller
{
public ActionResult Details(Guid id)
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
对于该请求yourSite/project/someValidGuid,现在将请求发送到Details行动ProjectController
| 归档时间: |
|
| 查看次数: |
5319 次 |
| 最近记录: |