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

use*_*512 16 c# asp.net-web-api attributerouting asp.net-web-api-routing asp.net-web-api2

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

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

Web api中的路由配置为:

config.MapHttpAttributeRoutes();
Run Code Online (Sandbox Code Playgroud)

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

public class AlertApiController:ApiController
{
    [Route("alert")]
    [HttpGet]
    public HttpResponseMessage GetAlert()
    {
        return Request.CreateResponse<string>(HttpStatusCode.OK,  "alert");
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我转到网址"/ alert"时我得到了404.

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

有任何想法吗?

Dar*_*ler 14

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

public static class MyApiConfig {


  public static void Register(HttpConfiguration config) {
      config.MapHttpAttributeRoutes();
  }
}
Run Code Online (Sandbox Code Playgroud)

无论你现在在哪里打电话config.MapHttpAttributeRoutes(),而是打电话MyApiConfig.Register(config).

  • @DannyMeister是的,这只是一种保证包含控制器的程序集实际已被加载的技术. (4认同)

小智 11

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

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

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