asp.net - ASP.NET Web API中基于属性的路由与命令式路由的具体优缺点是什么?

标签 asp.net asp.net-mvc asp.net-web-api

去年,基于属性的路由被引入到ASP.NET Web API路由(http://weblogs.asp.net/scottgu/archive/2013/04/19/asp-net-web-api-cors-support-and-attribute-based-routing-improvements.aspx)的核心中。

我想添加的内容暗示它在某种程度上比应用程序启动中的标准命令式路由方法要好,但是除了开发者偏好(这不是我在这里关注的)之外,这两种方法的具体优点和缺点是什么?

更新:我应该澄清一下,“它比它更好”将更好地表述为:“它在值(value)之上增加了值(value)”。我的意思是,只有在他们认为有值(value)的情况下,他们才会添加它。所以我的问题是,这两种方法之间的利弊是什么(除了简单的偏好之外)。

最佳答案

属性路由更加干燥。例如:

[RoutePrefix("{controller}")]
[Route("{reviewId:int}/{action=Show}")]
public class ReviewsController : Controller {

   public ActionResult Show(int reviewId) {
      throw new NotImplementedException();
   }

   public ActionResult Edit(int reviewId) {
      throw new NotImplementedException();
   }

   [Route("foo")]
   public ActionResult Foo() {
      throw new NotImplementedException();
   }
}

为上述 Controller 创建的路由为:
routes.MapRoute(null, "{controller}/foo", 
    new { controller = "Reviews", action = "Foo" });

routes.MapRoute(null, "{controller}/{reviewId}/{action}", 
    new { controller = "Reviews", action = "Show" }, 
    new { reviewId = new IntRouteConstraint() });

注意:
  • 在“显示和编辑”路由中,您不必为 Controller 指定默认值,属性路由会为您提供默认值。
  • 在Foo的路由中,它继承了路由前缀,您无需指定 Controller 和操作默认值。
  • 关于asp.net - ASP.NET Web API中基于属性的路由与命令式路由的具体优缺点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22539163/

    相关文章:

    asp.net - 固定 gridview 大小与图像 asp.net

    javascript - DropZone.js 使用 ASP.Net MVC 上传多个文件

    c# - Ajax.BeginFrom 验证模型

    testing - 当 web api 仍在 iis 上运行时,如何在内存托管框架中使用组件测试 web api?

    entity-framework - OData异常复杂类型 'WebTools.Order'通过属性 'WebTools.Customer'引用实体类型 'Customer'

    asp.net - 从 AuthorizeAttribute 过滤器中获取 cookie

    c# - 如何从 .aspx 中读取用户输入并将其存储在 .aspx.cs 中的 SQL Server 数据库中

    mysql - 检查是否存在。如果存在则不插入数据,如果不存在则插入数据

    asp.net-mvc - MVC 应用程序中部分页面的 SEO

    asp.net - IE10 有条件的 IE 注释 <!--> 功能启动器