C# 来自外部程序集的APIController的属性路由

C# 来自外部程序集的APIController的属性路由,c#,.net,asp.net-mvc,asp.net-web-api,C#,.net,Asp.net Mvc,Asp.net Web Api,我有一个大型ASP.NET MVC 5应用程序,现在我想为它实现Web API。但是我想把apicontroller放在一个独立的项目中。 我在组织Web API的路由时遇到问题: 我希望我的主要申请路线 host/* API映射到 host/api/* 对于API,我想使用属性路由,但无法使用正确的方法设置WebApiConfig 如何组织此过程,保持在WebApiConfig类中使用“属性路由”的能力: public static class WebApiConfig { pu

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

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

我希望我的主要申请路线

host/*
API映射到

host/api/* 
对于API,我想使用属性路由,但无法使用正确的方法设置WebApiConfig


如何组织此过程,保持在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
{host}/api/otheraction/{id}

希望能有所帮助

我找到了解决方案:

对于APIController,无需重新实现工厂

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

  • 使用ApicController向项目添加依赖项

  • 以这种方式编辑Global.asax

    替换:

    WebApiConfig.Register(GlobalConfiguration.Configuration);
    

  • 在WebApiConfig.Register中

    config.MapHttpAttributeRoutes();
    
    启用属性路由


  • 现在,Web API引擎可以找到范围内的所有APIController。

    在项目上实现Web API的原因是什么?它是为现有和新的UI功能服务的吗?在这种情况下,我会问,真的有必要在一个已经很大的MVC应用程序中引入另一层吗?或者是为了提供一组服务,以便外部/第三方集成到您的域中?是的,我们计划在客户端重新实现UI,并为第三方服务提供API访问。BigApp的旧部分将一点一点地消失
    config.MapHttpAttributeRoutes();