Asp.net-Mvc-5
找到多個與 URL 匹配的控制器類型。如果多個控制器上的屬性路由與請求的 URL 匹配,就會發生這種情況
…猜猜我是第一個問這個的?
假設您有以下路由,每個路由都在不同的控制器上聲明:
[HttpGet, Route("sign-up/register", Order = 1)] [HttpGet, Route("sign-up/{ticket}", Order = 2)]
Order…您可以在 MVC 5.0 中使用相同的程式碼執行此操作,但參數除外。但升級到 MVC 5.1 後,您會在問題標題中看到異常消息:找到多個與 URL 匹配的控制器類型。如果多個控制器上的屬性路由與請求的 URL 匹配,就會發生這種情況。
那麼新
RouteAttribute.Order屬性只是控制器級別的嗎?我知道在 AttributeRouting.NET 中你也可以這樣做SitePrecedence。當所有操作都在同一個控制器中時,唯一的方法是擁有上述路由嗎?更新
抱歉,我應該提到這些路由是在 MVC 控制器上,而不是 WebAPI。我不確定這會如何影響 ApiControllers。
在屬性路由的情況下,Web API 會嘗試查找與請求匹配的所有控制器。如果它看到多個控制器能夠處理這個問題,那麼它會拋出一個異常,因為它認為這可能是一個使用者錯誤。這種路由探測不同於第一個匹配獲勝的正常路由。
作為一種解決方法,如果您在同一個控制器中有這兩個操作,那麼 Web API 會遵循路由優先級,您應該會看到您的場景正常工作。
如果您知道這
ticket將是一個,int您可以在路由中指定該類型以幫助解析路由:
[HttpGet, Route("sign-up/register")] [HttpGet, Route("sign-up/{ticket:int}")]根據 user1145404 的評論,這種方法對我有用,其中包括指向具有相同路由前綴 ASP.NET Web Api 的多個控制器類型的連結