Web API 2路由 - 路由属性

时间:2016-11-10 16:52:10

标签: c# asp.net-web-api asp.net-web-api-routing

问题是关于使用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)。有什么我错过了,做错了等吗?我知道那里有很多帖子定义了如何传递多个参数,但我认为我的问题更具体地说明为什么一个有效而另一个无效。

2 个答案:

答案 0 :(得分:15)

您需要致电config.MapHttpAttributeRoutes()

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

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

答案 1 :(得分:7)

Attribute Routing in 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 }
        );
    }
}