gh9*_*gh9 23 c# asp.net-web-api attributerouting asp.net-web-api-routing asp.net-web-api2
据我所知,这RoutePrefix不会自己添加到路由表的路由.在您的操作上,您需要Route声明一个属性.我很难找到一个权威的博客/ msdn页面/一些东西,说明为什么defalut RoutePrefix不会添加到路由表的路由.
有没有人有一个确实含有此权威的权威帖子,如果是这样,你会告诉我它是谁.非常感谢你.
编辑 以澄清我的问题
什么都不行
[RoutePrefix("api/Steve")]
public class SteveController : ApiController
{
public int get(){return 1000000;}
}
Run Code Online (Sandbox Code Playgroud)
作品
[RoutePrefix("api/Steve")]
public class SteveController : ApiController
{
[Route("")]
public int get(){return 1000000;}
}
Run Code Online (Sandbox Code Playgroud)
上面的场景是有效的,因为我们明确表示对该路径的get操作SteveController有一条空路线.一旦我们这样做,路线就会被添加到RouteTable
第一种情况不起作用,因为只是使用RoutePrefix不会向路由表添加任何内容.RoutePrefix本身不会产生路线.这似乎是常识,我想知道一个说明原因的来源.优先受尊敬的社区成员,即Jon Skeet或Microsoft团队成员.
Nko*_*osi 19
路由前缀在属性路由中按设计与路由相关联.
它用于为整个控制器设置公共前缀.
如果您阅读了介绍该功能的发行说明,您可以更好地了解该主题.
属性路由
由于Tim McCall的贡献,ASP.NET Web API现在支持属性路由.使用属性路由,您可以通过注释您的操作和控制器来指定Web API路由,如下所示:
[RoutePrefix("orders")]
public class OrdersController : ApiController
{
[Route("{id}")]
public Order Get(int id) { }
[Route("{id}/approve")]
public Order Approve(int id) { }
}
Run Code Online (Sandbox Code Playgroud)
通过属性路由,您可以更好地控制Web API中的URI.例如,您可以使用单个API控制器轻松定义资源层次结构:
public class MoviesController : ApiController
{
[Route("movies")]
public IEnumerable<Movie> Get() { }
[Route("actors/{actorId}/movies")]
public IEnumerable<Movie> GetByActor(int actorId) { }
[Route("directors/{directorId}/movies")]
public IEnumerable<Movie> GetByDirector(int directorId) { }
}
Run Code Online (Sandbox Code Playgroud)
关于这个主题的一篇非常好的文章
虽然没有关于这个主题的专家,但我的理解是如何运作的.
使用属性路由,框架检查控制器操作的路由属性,以创建要添加到路由表的路由条目.因此,只要您使用属性路由,您将使用[RouteAttribute].如果没有此属性,操作将默认返回基于约定的路由.这RoutePrefixAttribute是一个可扩展点,可让您更好地控制定义路由/网址的方式.发行说明同样多.
除了我的理解和提供的最后一个链接,其他一切都是从MS文档中引用的.
有关权威信息,请参见MSDN(重点我的)中的说明。
放置在控制器或动作上,以通过路线直接将其公开。当放置在控制器上时,它适用于没有任何System.Web.Mvc.RouteAttribute的操作。
使用适用于控制器内所有动作的路由前缀来注释控制器。
如您所见,Route提到的描述提到了公开操作,但RoutePrefix没有。
| 归档时间: |
|
| 查看次数: |
37568 次 |
| 最近记录: |