在其他项目的Web Api控制器中,路由属性不起作用

本文关键字:路由 属性 不起作用 控制器 Api 其他 项目 Web | 更新日期: 2023-09-27 17:50:48

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

类库包含一个带有属性路由的ApiController。我从web api项目中添加了一个引用到类库,并期望这能正常工作。

在web api中配置路由:

config.MapHttpAttributeRoutes();

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

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

但是当我进入url "/alert"时,我得到一个404。

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

任何想法?

在其他项目的Web Api控制器中,路由属性不起作用

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

public static class MyApiConfig {

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

当前呼叫config.MapHttpAttributeRoutes()时,请改为呼叫MyApiConfig.Register(config)

一种可能是你在不同的控制器上有两个同名的路由。

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

当我改变其中一个控制器的名称时,它开始工作。Route Attribute似乎只与类名相关,而忽略了名称空间。

我们试图解决一个类似的问题。外部程序集中的路由没有正确注册。在尝试本页所示的解决方案时,我们发现了一个额外的细节。调用外部程序集"MyApiConfig。Register"需要在调用MapHttpRoute

之前出现
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 }
        );