C# 其他项目中的Web Api控制器,路由属性不工作

C# 其他项目中的Web Api控制器,路由属性不工作,c#,asp.net-web-api,asp.net-web-api2,asp.net-web-api-routing,attributerouting,C#,Asp.net Web Api,Asp.net Web Api2,Asp.net Web Api Routing,Attributerouting,我有两个项目的解决方案。一个WebAPI bootstap项目和另一个是类库 类库包含一个具有属性路由的ApiController。 我在类库中添加了一个来自WebAPI项目的引用,希望它能正常工作 web api中的路由配置如下: config.MapHttpAttributeRoutes(); 控制器很简单,看起来像: public class AlertApiController:ApiController { [Route("alert")] [HttpGet]

我有两个项目的解决方案。一个WebAPI bootstap项目和另一个是类库

类库包含一个具有属性路由的ApiController。 我在类库中添加了一个来自WebAPI项目的引用,希望它能正常工作

web api中的路由配置如下:

config.MapHttpAttributeRoutes();
控制器很简单,看起来像:

public class AlertApiController:ApiController
{
    [Route("alert")]
    [HttpGet]
    public HttpResponseMessage GetAlert()
    {
        return Request.CreateResponse<string>(HttpStatusCode.OK,  "alert");
    }
}
公共类AlertApicController:ApicController
{
[路线(“警报”)]
[HttpGet]
公共HttpResponseMessage GetAlert()
{
返回请求.CreateResponse(HttpStatusCode.OK,“警报”);
}
}
但是当我转到url“/警报”时,我得到了404

我错过了什么?为什么我不能使用这个控制器?程序集肯定已加载,因此我不认为这是答案


有什么想法吗?

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

public static class MyApiConfig {


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

无论您当前在何处调用
config.maphttpAttribute路由()
,都可以调用
MyApiConfig.Register(config)

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

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


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

我们试图解决类似的问题。 外部程序集中的路由未正确注册。 在尝试本页所示的解决方案时,我们发现了一个额外的细节。 对外部程序集“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 }
        );

是否确实在调用MapAttributeRoutes时加载了程序集?在进行映射之前,请尝试调用该程序集中的某个伪静态方法。仍然不起作用,默认路由或属性路由都不起作用。@user1613512:您曾经设法解决过这个问题吗?我有同样的问题(有多个程序集-插件等-和[RoutePrefix]属性被忽略。我只能通过默认路由配置使用服务。这对我来说没有太大意义。为什么在同一对象实例上调用同一方法的上下文会影响方法调用的结果?这似乎表明您必须在所有类l上执行此操作您拥有的库包括
ApiController
。如果这只是为了确保他在映射路由之前确实加载了类库,那么我的类似问题肯定不同。@DannyMeister是的,这只是一种技术,可以确保包含控制器的程序集已实际加载。这对我有很大帮助bunch.我将特性命名为namespace,因此控制器中刚调用namespace.Controller.WebAPI2决定将其静默转换为404s,而不是向我提供任何关于发生了什么的信息:S.GREATE!非常感谢!这就是我的情况。我也有这个问题。我们冒险进行属性路由,正是为了避免创建单独的控制器类用于相同的目的,使用不同的路由。但它不起作用。在我们将类名更改为不同的名称之前,不断出现404个错误。如果我们必须创建不同的类,
maphttroute
将更容易实现。你们中有人找到了不要求控制器具有不同nam的解决方案吗我试过一些,甚至试过搬进一个单独的集会,但运气不好。