2016-07-05 56 views
2

爲什麼這不起作用?我收到錯誤:System.InvalidOperationException:發現多個與URL匹配的控制器類型。如果多個控制器上的屬性路由匹配請求的URL,就會發生這種情況在c#web api 2.0中發現多個控制器類型錯誤

public class ConfigUpdateController: ApiController 
{ 
    [HttpPut] 
    [Route("api/device/{serial}/config")] 
    public IHttpActionResult Update(
     [FromUri] string serial, 
     [FromBody] Configuration configuration) 
    { 

    } 
} 

public class ConfigQueryController: ApiController 
{ 
    [HttpGet] 
    [Route("api/device/{serial}/config")] 
    public IHttpActionResult Get(
     [FromUri] string serial) 
    { 

    } 
} 

爲什麼我想要在單獨的控制器中具有相同資源的方法的原因是從命令解耦查詢。

編輯

說實話,這是足夠的代碼來說明我的問題,所以請不要打擾評論控制器命名等。這在我的問題中並不重要。

EDIT 2

我已經在這裏找到web-api overview泰德路由有3個階段:

Routing has three main phases: Matching the URI to a route template. Selecting a controller. Selecting an action.

如此看來,這並不工作,因爲控制器不能得到解決,方法動詞(PUT,GET )甚至沒有檢查? O_o

+1

方法具有相同的簽名和相同的路由導致問題。請更改您的方法或路線的簽名。使用適當的控制器命名也不會對您造成傷害。 – hbulens

+0

你的路線不是基於控制器 – brykneval

+0

ASP.NET MVC將允許你有兩個具有相同名稱的動作,但不具有相同的簽名,看看這個答案http://stackoverflow.com/questions/9552761/ get-and-post-methods-with-the-same-action-name-in-the-the-controller – user65439

回答

0

仔細閱讀錯誤,然後查看您的屬性路由。您有兩個不同操作的相同網址。程序將不知道要執行哪個動作。

+2

他們不是。一個是GET和第二個PUT。路由器應該區分這種明顯的區別,你不覺得嗎? – Pujubuju

0

使用[FromRoute]代替[FromUri]註釋

相關問題