我正在將舊版web api應用程序轉換爲mvc 6/.net核心,並且遇到了無法解決的問題。在web api中,您可以定義映射到多個操作的單個路由,並根據查詢字符串調用正確的操作。例如:查詢字符串上的匹配路由
routes.MapHttpRoute(
name: "Foo",
routeTemplate: GetRoute("api/Foo"),
defaults: new
{
controller = "Foo",
action = "Bar",
name = "foobar"
}
);
public class Foo : ApiController
{
[AcceptVerbs("GET")]
public Task<HttpResponseMessage> Bar(int id)
{
//process request
}
[AcceptVerbs("GET")]
public Task<HttpResponseMessage> Bar(string message)
{
//process request
}
}
foo/bar?id = 1和foo/bar?message =某些消息將被路由到正確的方法。這不適用於mvc 6.我嘗試使用Microsoft.AspNetCore.Mvc.WebApiCompatShim,但它不起作用,至少沒有使用屬性路由。除了用所有可能的參數創建單個動作,然後進行空檢查之外,是否還有其他選擇?不幸的是,改變路線不是一種選擇,因爲它們目前正在被客戶端應用程序使用。
這將工作,但我不能使用api/foo/bar/abc我需要使用api/foo?message = abc和api/foo?id = 123 – cdaq
您可以使用重寫url引擎來轉換來自api的請求/ foo?message = abc to api/foo/bar/abc和api/foo?id = 123 to api/boo/bar/123。 –
這會工作!你能指出我有哪些資源可以說明如何做到這一點?我不熟悉重寫URL引擎。 – cdaq