簡體   English   中英

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

[英]Web Api Controller in other project, route attribute not working

我有兩個項目的解決方案。 一個Web Api bootstap項目,另一個是類庫。

類庫包含一個帶屬性路由的ApiController。 我將web api項目中的引用添加到類庫中,並希望它能夠正常工作。

Web api中的路由配置為:

config.MapHttpAttributeRoutes();

控制器很簡單,看起來像:

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

但是當我轉到網址“/ 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 }
        );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM