来自外部程序集的ApiControllers的属性路由

时间:2014-02-27 15:11:59

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

我有一个很大的ASP.NET MVC 5应用程序,现在我想为它实现Web API。但是我想把ApiControllers放在一个单独的项目中。

我在组织Web API路由时遇到问题:

我希望我的主要应用程序路由

host/*

API映射

host/api/* 

对于API,我想使用属性路由,但无法以正确的方式设置WebApiConfig。

如何组织这个,保留使用“属性路由”的能力?

2 个答案:

答案 0 :(得分:2)

我找到了解决方案:

对于ApiControllers,没有必要重新实现工厂。

在项目Web(主要)中,我们需要:

  1. 使用ApiControllers

  2. 向项目添加依赖项
  3. 以这种方式编辑Global.asax

    取代:

    WebApiConfig.Register(GlobalConfiguration.Configuration);
    

    GlobalConfiguration.Configure(WebApiConfig.Register);
    
  4. WebApiConfig.Register中的
  5. config.MapHttpAttributeRoutes();
    

    启用属性路由。

  6. 现在,Web API引擎可以在Scope中找到所有ApiControllers。

答案 1 :(得分:0)

在您的WebApiConfig类中:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();
    }
}

在您的控制器中:

[RoutePrefix("api")]
public class MyController : ApiController
{
    [Route("myaction")]
    public IHttpActionResult MyAction()
    {
       //code
    }

    [Route("otheraction/{id}")]
    public IHttpActionResult OtherAction(int id)
    {
       //code
    }
}

现在,此控制器的路由和这些操作将按如下方式映射:

{host} / api / myaction
{主机} / API / otheraction / {ID}

希望有所帮助