【问题标题】:MVC 6 Attribute Routing using the new "[controller]/[action]" Tokens and Areas使用新的“[controller]/[action]”令牌和区域的 MVC 6 属性路由
【发布时间】:2016-01-11 03:52:34
【问题描述】:

好的,我知道在 MVC 6 中使用属性路由的最简单方法是:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseMvc();
    }
}

这是使用新令牌(无区域)的控制器代码:

[Route("[controller]/[action]")]
public class HomeController : Controller
{
}

这是使用新令牌(带区域)的控制器代码:

[Area("MyArea")]
[Route("[controller]/[action]")]
public class HomeController : Controller
{
}

问题:

  1. 这是 MS 希望您使用区域和令牌对控制器进行编码的方式吗?
  2. 或者有更清洁的方法吗?
  3. 他们能以某种方式创建一个 [area] 令牌吗?

最后,我知道我可以玩这个游戏,但第一种基于约定的方法 - app.UseMvc() - 不是最简单的吗?

public void Configure(IApplicationBuilder app)
{
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "areaRoute",
            template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
        );
    });
}

【问题讨论】:

    标签: asp.net-mvc-routing asp.net-core-mvc


    【解决方案1】:

    Microsoft 为您提供了两种选择,每种都有自己的优缺点。您应该根据您的上下文/需求来决定哪一个更好。

    基于约定的路由

    优点:

    • 它更简单,无需在每个操作级别上定义所有内容,您只需一劳永逸地决定您的网址的外观。
    • 当您的网址与控制器/操作名称完全匹配时完美。
    • 如果要更改 url,则需要更改类/方法的名称。
    • 非常适合具有干净且可预测的 url 结构的项目。
    • 非常适合快速制作新项目的原型。
    • 对开发人员来说稍微容易一些 -> 通过知道一个 URL,您就知道功能所在的控制器/动作

    缺点:

    • 你失去了一点控制

    基于属性的路由

    优点:

    • 让您可以完全控制网址的外观,例如用于 SEO 目的。
    • 如果您想更改 URL,则无需更改类/方法的名称。
    • 完美适用于您的网址与控制器和操作名称不匹配或您想要手工制作它们(即客户想要的)。
    • 非常适合保持向后兼容性,当您有一个旧项目并希望拥有兼容的 url 结构时。

    缺点:

    • 需要更多的工作,因为您需要在代码中定义路由。请注意,向类/方法添加属性只需几秒钟。

    如何决定使用哪一个:

    • 如果您有/希望有很少的routes.MapRoute() 调用 -> 使用约定路由更简单

    • 如果你有/期望有很多 routes.MapRoute() 调用 -> 使用属性路由

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多