这是我的代码:
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" });
我想要一个用于编写更少代码的解决方案,实际上是producthow的模板和产品操作的另一个模板
答案 0 :(得分:2)
您可以在MVC中使用Attribute Based Routing。这在MVC5中默认可用,或者可以在MVC4中作为NuGet包安装。
使用基于属性的路由,您可以在操作方法上定义属性,而不是在路由表中定义魔术字符串匹配。您还可以执行更高级的类型检查,例如最小值和最大值,以及可选的名称路径,以便在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) { ... }
}
答案 1 :(得分:1)
Saman,你可以创建一个默认路由,如下所示。我不确定这是否适用于“MapRouteLowercase”,你可以尝试一下。
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {
controller = "Home",
action = "Index",
id = UrlParameter.Optional }
);
如果您愿意,此link有更多选项。