我在使 WEBAPI 2 属性路由正常工作时遇到问题。我正在寻找的路由方案是 /api/{product}/{controller}/{id-optional}
,所以像 /api/Vision/IdCard
。 Controller 位于一个区域中,设置如下:
namespace DataServices.Controllers.Vision
{
[RoutePrefix("api/vision")]
public class IdCardController : BaseApiController
{
[System.Web.Mvc.RequireHttps]
[Route("idcard")]
public IdCardViewModel Get(HttpRequestMessage request)
{...}
每当我执行此操作时,都会收到 404。我包含了命名空间,因为该区域在它自己的命名空间中。 WEBAPI 属性路由是否支持区域?
编辑:WebApiConfig 看起来像这样:
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
最佳答案
您需要从 GlobalConfiguration 对象获取 HttpConfiguration 实例,并从 AreaRegistration.cs 的 RegisterArea 方法内部调用 MapHttpAttributeRoutes() 方法。
public override void RegisterArea(AreaRegistrationContext context)
{
GlobalConfiguration.Configuration.MapHttpAttributeRoutes();
//... omitted code
}
每个区域都必须这样做。 最后,您必须在“WebApiConfig”中删除“config.MapHttpAttributes()”方法,否则您将得到重复的异常。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
config.EnableCors();
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
//config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
关于c# - 区域不工作的 WebAPI 2 属性路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31008197/