应用程序区域中的ASP.NET MVC WebAPI

时间:2014-07-01 09:53:58

标签: asp.net-mvc asp.net-web-api asp.net-mvc-areas

我正在尝试将WebAPI用作MVC5应用程序的一部分。应用程序有区域,所以要保持我创建的现有结构和" API"区域。但是,我遇到了一些路由问题,因为我在访问API URL时遇到了404.

我已经阅读了很多帖子,主要是MVC4的例子,到目前为止我还没有取得任何成功。

最初,我将API路由作为区域路由的一部分,因此在上面的默认路由之上,我使用了RouteTemplate API/{controller}

public override void RegisterArea(AreaRegistrationContext context)
{
     context.MapRoute(
          "API_default",
          "API/{controller}/{action}/{id}",
          new { action = "Index", id = UrlParameter.Optional }
      );
}

然后我意识到我的错误并将API路由移动到同一区域注册文件中的不同方法

public static void Register(HttpConfiguration config)
{
     config.Routes.MapHttpRoute(
         name: "Direct_API",
         routeTemplate: "API/{controller}"
     );
}

我现在已经完全将API路由移出区域注册文件,在app_start中创建了一个新的API路由配置文件,并在应用程序路由文件之前在global.asax中注册了它。但是,如果我转到http://localhost:port/API/Import,我还是没有点击API控制器。

API导入控制器位于应用程序的API区域

public class ImportController : ApiController
{
   [HttpGet]
   public Array Get()
   {
        return new[]{true, false, false, true};
   }
}

Global.asax注册

AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);

我还尝试注册文件MVC4方式WebApiConfig.Register(GlobalConfiguration.Configuration);

1 个答案:

答案 0 :(得分:2)

我找到了答案,但我想我将在未来帮助其他人。许多涉及此主题的示例和文章,以及RouteConfig 必须在WebAPI配置之后的非常具体的内容。我对此非常小心。

但是,我完全忽略了区域注册首先运行。 将AreaRegistration.RegisterAllAreas();移至GlobalConfiguration.Configure(WebApiConfig.Register);后解决问题。

这仍然使API注册成为全局,因为它本地化为一个区域感觉不对。我想我可以通过属性路由和删除API的区域注册文件来解决这个问题。