MVC 6属性路由使用新的" [控制器] / [动作]"代币和区域

时间:2016-01-11 03:52:34

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

好的,我知道在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. 他们能以某种方式创建[区域]令牌吗?
  4. 最后,我知道我可以玩这个游戏,但不是第一个基于会议的方法 - app.UseMvc() - 最简单的吗?

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

1 个答案:

答案 0 :(得分:0)

Microsoft为您提供了两个选项,每个选项都有自己的优缺点。您应根据您的背景/需求决定哪一个更好。

基于约定的路由

优点:

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

缺点:

  • 你松了一点控制

基于属性的路由

优点:

  • 让您完全控制网址的外观,例如用于搜索引擎优化目的。
  • 如果要更改网址,则无需更改类/方法的名称。
  • 当您的网址与控制器和操作名称不匹配或您想手工制作它们(即客户想要的)时,这是完美的。
  • 当您拥有旧项目并希望拥有兼容的网址结构时,非常适合维护向后兼容性。

缺点:

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

如何决定使用哪一个:

  • 如果您有/期望很少routes.MapRoute()次来电 - >使用约定路由作为其更简单的

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