Sök…


Hur routing fungerar i asp.net webapi

I ASP.NET Web API är en controller en klass som hanterar HTTP-förfrågningar. Kontrollörens offentliga metoder kallas handlingsmetoder eller helt enkelt handlingar.

När Web API-ramverket får en begäran, dirigerar den begäran till en åtgärd. För att bestämma vilken åtgärd att åberopa använder ramen en routingtabell. Visual Studio-projektmallen för Web API skapar en standardväg:

routes.MapHttpRoute(
    name: "API Default",
    routeTemplate: "**api/{controller}/{id}**",
    defaults: new { id = RouteParameter.Optional }
);

Den här rutten definieras i filen WebApiConfig.cs, som är placerad i katalogen App_Start: ange bildbeskrivning här

Varje post i routingtabellen innehåller en ruttmall. Standardvägsmallen för Web API är " api / {controller} / {id} ". I den här mallen är " api " ett bokstavssegment och { controller } och { id } är platshållarvariabler.

När Web API-ramverket får en HTTP-begäran försöker den matcha URI mot en av ruttmallarna i routingtabellen. Om ingen rutt matchar får klienten ett 404-fel.

Följande URI: er matchar till exempel standardvägen:

  • / api / värden
  • / api / värden / 1

Följande URI matchar dock inte, eftersom det saknar segmentet " api ":

  • / värden / 1

När en matchande rutt har hittats väljer Web API kontrollenheten och åtgärden:

  • För att hitta styrenheten lägger Web API till "Controller" till värdet på variabeln {controller}.
  • För att hitta åtgärden tittar Web API på HTTP-metoden och letar sedan efter en åtgärd vars namn börjar med det HTTP-metodnamnet. Med en GET-förfrågan letar till exempel Web API efter en åtgärd som börjar med "Get ...", till exempel "GetEmployee" eller "GetAllEmploici". Denna konvention gäller endast GET-, POST-, PUT- och DELETE-metoder.

Du kan aktivera andra HTTP-metoder genom att använda attribut på din controller. Vi ser ett exempel på det senare.

  • Andra platshållare-variabler i ruttmallen, till exempel {id}, mappas till åtgärdsparametrar.

HTTP-metoder I stället för att använda namnkonventionen för HTTP-metoder kan du uttryckligen ange HTTP-metoden för en åtgärd genom att dekorera åtgärdsmetoden med attributet HttpGet, HttpPut, HttpPost eller HttpDelete.

I följande exempel mappas EmployeeGetEmployee-metoden till GET-förfrågningar:

 public class EmployeesController : ApiController
    {
        [HttpGet]
        public EmployeeGetEmployee(id) {}
    }   

För att tillåta flera HTTP-metoder för en åtgärd eller för att tillåta andra HTTP-metoder än GET, PUT, POST och DELETE använder du attributet AcceptVerbs som tar en lista med HTTP-metoder.

public class EmployeesController: ApiController
{
    [AcceptVerbs("GET", "HEAD")]
    public Employee GetEmployee (id) { }
}

Ruttning efter åtgärdsnamn

Med standard routingmall använder Web API HTTP-metoden för att välja åtgärden. Du kan dock också skapa en rutt där åtgärdens namn ingår i URI:

routes.MapHttpRoute(
    name: "ActionApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

I den här ruttmallen namnger parametern {action} handlingsmetoden på styrenheten. Med denna routingstil använder du attribut för att ange de tillåtna HTTP-metoderna. Anta till exempel att din controller har följande metod:

public class EmployeesController: ApiController
{
    [HttpGet]
    public List<Employee> GetAllEmployees();
}

I det här fallet skulle en GET-begäran för " api / Medarbetare / GetAllEmploici " kartlägga till GetAllEmploiants-metoden.

Du kan åsidosätta åtgärdens namn med attributet ActionName. I följande exempel finns det två åtgärder som mappas till " api / Medarbetare / ShowAllEmploici / id . Den ena stöder GET och den andra stöder POST:

public class EmployeesController : ApiController
{
    [HttpGet]
    [ActionName("ShowAllEmployees")]
    public List<Employee> GetAll(int id);

    [HttpPost]
    [ActionName("ShowAllEmployees")]
    public void GetAll (int id);

}

Icke-åtgärder

Vi kan förhindra att en metod åberopas som en åtgärd med attributet NonAction. Detta signalerar till ramverket att metoden inte är en åtgärd, även om den annars skulle matcha rutningsreglerna.

 [NonAction]  
public string GetValues() { ... }

Verbbaserade routingsexempel.

Samma URl för olika http-metoder fungerar annorlunda. Nedan är en tabell som visar samma.

HTTP VERB URL BESKRIVNING
SKAFFA SIG / api / studerande Returnerar alla studenter
SKAFFA SIG / api / studerande / 5 Returnerar information om Student-id = 5
POSTA / api / studerande Lägg till en ny student
SÄTTA / api / studerande / 5 Uppdatera eleven med Id = 5
RADERA / api / studerande / 5 Radera student med Id = 5


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow