[英]ASP.NET MVC - Write less code for route template
这是我的代码:
routes.MapRouteLowercase(
name: "productadd",
url: "product/add",
defaults: new
{
controller = "Product",
action = "Add"
}
, namespaces: new[] { "project.Controllers" });
routes.MapRouteLowercase(
name: "productlike",
url: "product/like",
defaults: new
{
controller = "Product",
action = "Like"
}
, namespaces: new[] { "project.Controllers" });
routes.MapRouteLowercase(
name: "productshow",
url: "product/{id}/{seoName}",
defaults: new
{
controller = "Product",
action = "Get",
id = UrlParameter.Optional,
seoName = UrlParameter.Optional
}
, namespaces: new[] { "project.Controllers" });
我想要一种减少编写代码的解决方案,实际上是一个用于productshow的模板,另一个用于产品动作的模板
您可以在MVC中使用基于属性的路由 。 默认情况下,该功能在MVC5中可用,也可以作为NuGet软件包安装在MVC4中。
使用基于属性的路由,您可以在操作方法上定义属性,而不是在路由表中定义魔术字符串匹配。 您还可以执行更高级的类型检查,例如最小值和最大值,还可以选择命名路由,以便在Razor中方便引用。
举个例子:
[RoutePrefix("product")]
public class ProductController : Controller {
//route /product
[Route]
public ActionResult Index() { ... }
//route /product/add
[Route("add")]
public ActionResult Add() { ... }
//route /product/like
// <a href="@Url.RouteUrl("productLike")">Like</a>
[Route("like", Name="productlike")]
public ActionResult Like() { ... }
//route /product/{id}/{seoName}
[Route("{id?}/{seoName?}")]
public ActionResult Get(int? id, string seoName) { ... }
}
Saman,您可以创建一条默认路线,如下所示。 我不确定这是否适用于“ MapRouteLowercase”,您可以尝试一下。
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {
controller = "Home",
action = "Index",
id = UrlParameter.Optional }
);
如果需要,此链接具有更多选项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.