繁体   English   中英

Web API 2路由 - 路由属性

[英]Web API 2 routing - Route attribute

问题是关于使用Route属性定义自定义路由。

我知道在WebApiConfig类中,您总是定义默认路由,

configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}",
  new { id = RouteParameter.Optional });

当我想要传递另一个参数时,我无法工作的是什么。 我知道我可以这样做( 下面的代码定义在上面列出的默认路由下面 ):

    //configuration.Routes.MapHttpRoute(
    //    name: "GetBrandImagePaths",
    //    routeTemplate: "api/{controller}/{id}/{type}");

但我宁愿使用自定义路由,而不是在WebApiConfig文件中定义所有这些路由。 但是,如果我在文件中没有上面注释掉的代码,我会得到一个404.导致我相信自定义Route甚至没有被查看。

public class HelperApiController : ApiController
{
    [HttpGet]
    [Route("api/helperapi/{id}/{type}")]
    public string GetBrandImages(int id, string type)
    {
        .....
    }
}

我怎么能拥有它所以我可以使用WebApiConfig文件中定义的路由,并在各个API控制器中定义自定义路由。

请注意,该项目也是一个MVC项目(不仅仅是WebApi)。 有什么我错过了,做错了等吗? 我知道那里有很多帖子定义了如何传递多个参数,但我认为我的问题更具体地说明为什么一个有效而另一个无效。

您需要调用config.MapHttpAttributeRoutes()

这将解析所有Controller类并从属性派生路由。

我不会将其与标准路由混合使用。

ASP.NET Web API 2中的属性路由

启用属性路由

要启用属性路由,请在配置期间调用MapHttpAttributeRoutes 此扩展方法在System.Web.Http.HttpConfigurationExtensions类中定义。

 using System.Web.Http; namespace WebApplication { public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API routes config.MapHttpAttributeRoutes(); // Other Web API configuration not shown. } } } 

属性路由可以与基于约定的路由相结合。 要定义基于约定的路由,请调用MapHttpRoute方法。

 public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Attribute routing. config.MapHttpAttributeRoutes(); // Convention-based routing. config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM