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

本文关键字:代码 MVC NET 路由 ASP | 更新日期: 2023-09-27 17:56:23

这是我的代码:

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" });

我想要一个编写更少代码的解决方案,实际上是产品展示的模板和产品操作的另一个模板

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

您可以在MVC中使用基于属性的路由。 这在 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) { ... }
}

Saman,您可以创建一个默认路由,如下所示。我不确定这是否适用于"MapRouteLowercase",您可以尝试一下。

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { 
                controller = "Home", 
                action = "Index", 
                id = UrlParameter.Optional }
        );

如果需要,此链接有更多选项。