asp.net-web-api
Uruchamianie adresów URL interfejsu API sieci Web
Szukaj…
Jak działa routing w webapi asp.net
W ASP.NET Web API kontroler jest klasą, która obsługuje żądania HTTP. Metody publiczne kontrolera nazywane są metodami akcji lub po prostu akcjami.
Gdy środowisko API sieci Web odbiera żądanie, kieruje je do działania. Aby określić, którą akcję wywołać, środowisko używa tabeli routingu. Szablon projektu Visual Studio dla interfejsu API sieci Web tworzy domyślną trasę:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "**api/{controller}/{id}**",
defaults: new { id = RouteParameter.Optional }
);
Ta trasa jest zdefiniowana w pliku WebApiConfig.cs, który znajduje się w katalogu App_Start:
Każdy wpis w tabeli routingu zawiera szablon trasy. Domyślny szablon trasy dla interfejsu API sieci Web to „ api / {kontroler} / {id} ”. W tym szablonie „ api ” jest dosłownym segmentem ścieżki, a { sterownik } i { id } są zmiennymi zastępczymi.
Gdy platforma Web API odbiera żądanie HTTP, próbuje dopasować identyfikator URI do jednego z szablonów tras w tabeli routingu. Jeśli żadna trasa nie pasuje, klient otrzymuje błąd 404.
Na przykład następujące identyfikatory URI są zgodne z domyślną trasą:
- / api / values
- / api / values / 1
Jednak następujący identyfikator URI nie jest zgodny, ponieważ brakuje segmentu „ API ”:
- / wartości / 1
Po znalezieniu pasującej trasy interfejs API sieci Web wybiera kontroler i akcję:
- Aby znaleźć kontroler, interfejs API sieci Web dodaje „Controller” do wartości zmiennej {controller}.
- Aby znaleźć akcję, interfejs API sieci Web sprawdza metodę HTTP, a następnie szuka akcji, której nazwa zaczyna się od nazwy tej metody HTTP. Na przykład w przypadku żądania GET interfejs API sieci Web szuka działania rozpoczynającego się od „Get ...”, takiego jak „GetEmployee” lub „GetAllEmployees”. Ta konwencja dotyczy tylko metod GET, POST, PUT i DELETE.
Możesz włączyć inne metody HTTP, używając atrybutów na kontrolerze. Zobaczymy przykład później.
- Inne zmienne zastępcze w szablonie trasy, takie jak {id}, są mapowane na parametry akcji.
Metody HTTP Zamiast używać konwencji nazewnictwa dla metod HTTP, możesz jawnie określić metodę HTTP dla akcji, dekorując metodę akcji atrybutem HttpGet, HttpPut, HttpPost lub HttpDelete.
W poniższym przykładzie metoda EmployeeGetEmployee jest odwzorowana na żądania GET:
public class EmployeesController : ApiController
{
[HttpGet]
public EmployeeGetEmployee(id) {}
}
Aby zezwolić na wiele metod HTTP dla akcji lub na metody HTTP inne niż GET, PUT, POST i DELETE, użyj atrybutu AcceptVerbs, który pobiera listę metod HTTP.
public class EmployeesController: ApiController
{
[AcceptVerbs("GET", "HEAD")]
public Employee GetEmployee (id) { }
}
Routing według nazwy akcji
Przy domyślnym szablonie routingu interfejs API sieci Web używa metody HTTP do wybrania akcji. Można jednak również utworzyć trasę, w której nazwa działania znajduje się w URI:
routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
W tym szablonie trasy parametr {action} nazywa metodę działania na kontrolerze. W tym stylu routingu użyj atrybutów, aby określić dozwolone metody HTTP. Załóżmy na przykład, że twój kontroler ma następującą metodę:
public class EmployeesController: ApiController
{
[HttpGet]
public List<Employee> GetAllEmployees();
}
W takim przypadku żądanie GET dla „ api / Employees / GetAllEmployees ” zostałoby odwzorowane na metodę GetAllEmployees.
Możesz zastąpić nazwę akcji, używając atrybutu ActionName. W poniższym przykładzie są dwie akcje odwzorowane na „ api / Employees / ShowAllEmployees / id . Jedno obsługuje GET, a drugie obsługuje POST:
public class EmployeesController : ApiController
{
[HttpGet]
[ActionName("ShowAllEmployees")]
public List<Employee> GetAll(int id);
[HttpPost]
[ActionName("ShowAllEmployees")]
public void GetAll (int id);
}
Brak działań
Możemy zapobiec wywołaniu metody jako akcji za pomocą atrybutu NonAction. Sygnalizuje to ramie, że metoda nie jest działaniem, nawet jeśli w innym przypadku pasowałaby do reguł routingu.
[NonAction]
public string GetValues() { ... }
Przykłady routingu oparte na czasownikach.
Ten sam URl dla różnych metod HTTP działa inaczej. Poniżej znajduje się tabela przedstawiająca to samo.
| CZASOW. HTTP | URL | OPIS |
|---|---|---|
| OTRZYMAĆ | / api / students | Zwraca wszystkich studentów |
| OTRZYMAĆ | / api / students / 5 | Zwraca szczegóły Id studenta = 5 |
| POCZTA | / api / students | Dodaj nowego ucznia |
| POŁOŻYĆ | / api / students / 5 | Zaktualizuj ucznia o Id = 5 |
| USUNĄĆ | / api / students / 5 | Usuń ucznia o Id = 5 |