Web Api Controller在其他项目中,路由属性不起作用

我有两个项目的解决方案。 一个Web Api bootstap项目,另一个是类库。

类库包含一个带属性路由的ApiController。 我将web api项目中的引用添加到类库中,并希望它能够正常工作。

Web api中的路由配置为:

config.MapHttpAttributeRoutes(); 

控制器很简单,看起来像:

 public class AlertApiController:ApiController { [Route("alert")] [HttpGet] public HttpResponseMessage GetAlert() { return Request.CreateResponse(HttpStatusCode.OK, "alert"); } } 

但是当我转到url“/ alert”时,我得到了404。

我在这里想念的是什么? 为什么我不能使用这个控制器? 组装肯定是加载所以我不认为http://www.strathweb.com/2012/06/using-controllers-from-an-external-assembly-in-asp-net-web-api/是答案这里。

有任何想法吗?

试试这个。 在类库项目中创建一个如下所示的类,

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

无论你当前正在调用config.MapHttpAttributeRoutes() ,而是调用MyApiConfig.Register(config)

一种可能性是您在具有相同名称的不同控制器上有2条路由。

我有两个名为“UploadController”的控制器,每个控制器位于不同的命名空间中,每个控制器都用不同的[RoutePrefix()]装饰。 当我试图访问任一路线时,我得到了404。

当我更改其中一个控制器的名称时,它开始工作。 似乎Route属性仅键入类名并忽略命名空间。

我们试图解决类似的问题。 外部程序集中的路由未正确注册。 我们在尝试此页面上显示的解决方案时发现了一个额外的细节。 在调用MapHttpRoute之前需要调用外部程序集“MyApiConfig.Register”

 HttpConfiguration config = new HttpConfiguration(); MyExternalNamespace.MyApiConfig.Register(config); //This needs to be before the call to "config.Routes.MapHttpRoute(..." config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );