簡體   English   中英

正確制作asp.net Web API的路由

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM