Web API 2 路由 - 路由属性
Web API 2 routing - Route attribute
问题是关于使用 Route
属性定义自定义路由。
我知道在WebApiConfig
class你总是定义默认路由,
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
类 并从属性中导出路由。
我不会将其与标准路由混用。
Attribute Routing in ASP.NET Web API 2
Enabling Attribute Routing
To enable attribute routing, call MapHttpAttributeRoutes during
configuration. This extension method is defined in the
System.Web.Http.HttpConfigurationExtensions class.
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.
}
}
}
Attribute routing can be combined with convention-based routing. To
define convention-based routes, call the MapHttpRoute method.
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 }
);
}
}
问题是关于使用 Route
属性定义自定义路由。
我知道在WebApiConfig
class你总是定义默认路由,
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
类 并从属性中导出路由。
我不会将其与标准路由混用。
Attribute Routing in ASP.NET Web API 2
Enabling Attribute Routing
To enable attribute routing, call MapHttpAttributeRoutes during configuration. This extension method is defined in the System.Web.Http.HttpConfigurationExtensions class.
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. } } }
Attribute routing can be combined with convention-based routing. To define convention-based routes, call the MapHttpRoute method.
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 } ); } }