asp.net-web-api
Attributrouting in WebAPI
Suche…
Einführung
Wie der Name vermuten lässt, werden Attribute zum Routen verwendet. Dies gibt dem Benutzer mehr Kontrolle über die URIs in der WebAPI. Sie können beispielsweise Hierarchien der Ressource beschreiben. Das frühere "konventionelle Routing" wird jedoch vollständig unterstützt. Benutzer können auch eine Mischung aus beidem haben.
Syntax
- [RoutePrefix ("api / books")] - für Controller-Klasse
- [Route ("getById")] - für Aktionen
- [Route ("~ / api /hors / {authorId: int} / books")] - zum Überschreiben des Routenpräfix
Parameter
| Parametername | Einzelheiten |
|---|---|
| RoutePrefix | Attribut zur Controller-Klasse. Alle gängigen URL-Präfixe in Aktionen werden hier zusammengefasst. nimmt String als Eingabe |
| Route | Attribut für die Controller-Aktionen. Für jede Aktion wird eine Route zugewiesen (nicht unbedingt). |
| Route ("~ / api /") | Dadurch wird das Routenpräfix überschrieben |
Bemerkungen
Derzeit verfügt Attribute Routes nicht über Controller specific Message Handlers . Es gibt keine Möglichkeit anzugeben, welcher Handler zum Zeitpunkt der Deklaration für welche Route ausgeführt werden soll. Dies ist im Conventional Routing .
Grundlegendes Attribut-Routing
Fügen Sie der Controller-Aktion einfach ein Attribut hinzu
[Route("product/{productId}/customer")]
public IQueryable<Product> GetProductsByCustomer(int productId)
{
//action code goes here
}
Dies wird als /product/1/customer abgefragt und productId=1 wird an die Controller-Aktion gesendet.
Stellen Sie sicher, dass der Wert innerhalb von {} und der Aktionsparameter identisch sind. productId in diesem Fall.
Bevor Sie dies verwenden, müssen Sie angeben, dass Sie Attribut-Routing verwenden, indem Sie:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
}
}
Routenpräfix-Attribut
RoutePrefix Sie einen gemeinsamen Teil der Route für alle Routen innerhalb eines Controllers RoutePrefix , wird das RoutePrefix Attribut verwendet.
Im folgenden Beispiel ist ein Teil des Codes für api / students üblich, sodass wir RoutePrefix definieren und die wiederholte Verwendung vermeiden können.
[RoutePrefix("api/students")]
public class StudentController : ApiController
{
[Route("")]
public IEnumerable<Student> Get()
{
//action code goes here
}
[Route("{id:int}")]
public Student Get(int id)
{
//action code goes here
}
[Route("")]
public HttpResponseMessage Post(Student student)
{
//action code goes here
}
}