[英]Correctly crafting routes for asp.net web api
我正在努力在ASP Web應用程序中正確設計DELETE http請求。
我定義了以下路線:
public const string ControllerOnly = "ApiControllerOnly";
public const string ControllerAndId = "ApiControllerAndIntegerId";
private const string ControllerAction = "ApiControllerAction";
public static void Register(HttpConfiguration config)
{
var routes = config.Routes;
// api/projects
routes.MapHttpRoute(
name: ControllerOnly,
routeTemplate: "api/{controller}"
);
//api/projects/1
routes.MapHttpRoute(
name: ControllerAndId,
routeTemplate: "api/{controller}/{id}",
defaults: null,
constraints: new { id = @"^\d+$" } // id must be all digits
);
routes.MapHttpRoute(
name: ControllerAction,
routeTemplate: "api/{controller}/{action}"
);
}
我希望它能執行以下操作:
public HttpResponseMessage Delete(int i)
{
//content remove for brevity
return new HttpResponseMessage(HttpStatusCode.NoContent);
}
在提琴手中,我嘗試使用以下命令進行測試:DELETE http:// localhost:port / api / controller / 1
但是這種方法永遠不會受到打擊。 而是單擊以下方法:
public HttpResponseMessage Delete()
{
//content remove for brevity
return new HttpResponseMessage(HttpStatusCode.NoContent);
}
我對路由有基本的了解,但是難道我所定義的路由不能確保以前的測試成功嗎? 請注意,我對GET和POST動詞沒有問題
任何幫助表示贊賞
我想您需要在路線中添加操作部分,如下所示:-
routes.MapHttpRoute(
name: ControllerAndId,
routeTemplate: "api/{controller}/{action}/{id}",
defaults: null,
constraints: new { id = @"^\d+$" } // id must be all digits);
在默認路由之前添加/注冊其他路由路徑。 它總是需要第一個優先。 因此,在您的情況下,您需要在WebApiConfig中注冊另一個路徑,如下所示。
routes.MapHttpRoute(
name: "WithActionApi",
routeTemplate: "api/{controller}/{action}/{Id}",
defaults: new { Id = RouteParameter.Optional
});
注意:您必須在默認路由之前注冊此路由。 即,應如下所示。
public static void Register(HttpConfiguration config)
{
routes.MapHttpRoute(
name: "WithActionApi",
routeTemplate: "api/{controller}/{action}/{Id}",
defaults: new { Id = RouteParameter.Optional
});
routes.MapHttpRoute(
name: ControllerAndId,
routeTemplate: "api/{controller}/{id}",
defaults: null,
constraints: new { id = @"^\d+$" } // id must be all digits
);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.