2015-01-23 8 views
9

Ich versuche, mein Web-API-Projekt zu konvertieren, um Attribut-Routing zu verwenden. Eine Sache, die ich nicht verstehe, ist die CreatedAtRoute-Methode für eine POST-Anfrage. In meinem WebApiConfig.cs verwendete ich einAttribut Routing und CreatedAtRoute

config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/account/{accountId}/site/{siteId}/visitor/{visitorId}/session/{sessionId}/{controller}/{action}", 
      defaults: new { action = RouteParameter.Optional } 
     ); 

ich das es dachte kommentiert haben, aus nicht mehr benötigt, sondern CreatedAtRoute will den Namen der Route und kann es nicht finden. Wie wird das mit dem Attribut-Routing gehandhabt?

Antwort

25

Ok ... das war einfach, wenn Sie sehen, was los ist. Beim Attribut-Routing müssen Sie den Namen der Route angeben, um die Ressource abzurufen. Also auf meiner GET Aktion sieht es wie folgt aus:

[Route("{sessionId}",Name="GetSession")] 
    [ResponseType(typeof(Session))] 
    public async Task<IHttpActionResult> Get(HttpRequestMessage request, int accountId, int siteId, Guid visitorId, Guid sessionId) 

Und dann in der POST-Aktion Änderung des CreatedAtRoute aus:

return CreatedAtRoute("DefaultApi", new 
     { 
      controller: "session" 
      visitorId = session.VisitorId, 
      sessionId = session.SessionId 
     }, session); 

Um dies:

return CreatedAtRoute("GetSession", new 
     { 
      visitorId = session.VisitorId, 
      sessionId = session.SessionId 
     }, session); 
Verwandte Themen