c# - 区域不工作的 WebAPI 2 属性路由

标签 c# rest asp.net-web-api asp.net-mvc-routing asp.net-web-api2

我在使 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/

相关文章:

c# 仍然返回错误的核心数

spring - 用 Spring 玩框架 2.1

c# - 如何在自托管 Web API 上发送文件并在服务器上处理它?

jquery - Cors、Web Api、IE8、发布复杂数据

c# - 如何使用 Unity 在 web api 2.0 中进行构造函数级 DI

c# - XElement 的添加操作是线程安全的吗?

c# - Xamarin.Forms Shell 如何在路由导航中向字符串注入(inject)多个不同的值

c# - 即使表单没有焦点也拦截按键

java - 在 rest api 中返回 json 中的任何异常

java - Spring boot REST API 缺少 URI 模板变量