爲什麼這不起作用?我收到錯誤: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
方法具有相同的簽名和相同的路由導致問題。請更改您的方法或路線的簽名。使用適當的控制器命名也不會對您造成傷害。 – hbulens
你的路線不是基於控制器 – brykneval
ASP.NET MVC將允許你有兩個具有相同名稱的動作,但不具有相同的簽名,看看這個答案http://stackoverflow.com/questions/9552761/ get-and-post-methods-with-the-same-action-name-in-the-the-controller – user65439