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 
}

}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow