真的遇到了麻煩與MVC路由交手,儘管上讀到的博客和教程的負荷......MVC路由煩惱
我有這樣的WebAPI功能:
public HttpResponseMessage UpsertProducts([FromUri] int marketplaceId, [FromUri] int datasourceId, [FromBody]List<HeisenbergProduct> heisenbergProducts)
和Route.config
默認路由:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
一切正常。
我現在已經添加了另一個功能:
public HttpResponseMessage ReviseInventory([FromUri] int marketplaceId, [FromUri] int datasourceId, [FromBody]List<HeisenbergReviseInventory> heisenbergReviseInventories)
儘管動作名稱是不同的,似乎有衝突,並呼籲它們中的時,我得到一個500 internal server error
- 我猜它不知道哪一個使用。
我使用的URL美其名曰:
api/webapiproducts/upsertproducts?marketplaceId={0}&datasourceId={1}
我試圖通過使用屬性的路由來解決這個問題:
[Route("/api/WebApiProducts/upsertproducts/{marketplaceid}/{datasourceid}")]
public HttpResponseMessage UpsertProducts([FromUri] int marketplaceId, [FromUri] int datasourceId, [FromBody]List<HeisenbergProduct> heisenbergProducts)
和
[Route("/api/WebApiProducts/reviseinventory/{marketplaceid}/{datasourceid}")]
public HttpResponseMessage ReviseInventory([FromUri] int marketplaceId, [FromUri] int datasourceId, [FromBody]List<HeisenbergReviseInventory> heisenbergReviseInventories)
既不是我的路由屬性似乎工作。我在做什麼錯了,我在這裏不理解路由?
正如@Nkosi指出,我會把錯誤的路徑文件!這裏是我的WebApiConfig.cs內容:
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
你是正確的 - 我加了錯誤的配置文件contect - 我已經更新的問題有正確的數據。儘管使用我的查詢字符串參數仍然有問題。我設法通過更改我打電話的網址來實現它 - 我認爲你可以採取兩種方式。看到我的回答 – Rick
@瑞克。他們可以同時工作。映射路由的順序非常重要,因爲第一條路由匹配獲勝,首先映射更具體的路由,後面映射更多的通用路由。您需要通過將最後一個映射向上一個來切換順序。它沒有達到第二條基於常規的路線,因爲它已經與第一條路線相匹配。 – Nkosi
謝謝,是的,你對訂購是正確的 - 我忘了它。我改變了順序並嘗試使用querystring方法調用,但它仍然無法工作。我似乎仍然必須使用我在答案中提出的方法。 – Rick