ASP.NET MVC - 为路径模板编写更少的代码

时间:2015-06-14 17:40:44

标签: c# asp.net asp.net-mvc asp.net-mvc-4

这是我的代码:

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的模板和产品操作的另一个模板

2 个答案:

答案 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有更多选项。