2015-01-23 18 views
9

Sto provando a convertire il mio progetto Web Api per utilizzare il routing degli attributi. Una cosa che non sto capendo è il metodo CreatedAtRoute per una richiesta POST. Nei miei WebApiConfig.cs ho usato per avere unAttribute Routing e CreatedAtRoute

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

ho commentato questo fuori pensando che non era più necessario, ma CreatedAtRoute vuole il nome del percorso e posso trovarlo. Quindi, come viene gestito il routing degli attributi?

risposta

25

Ok ... questo è stato facile una volta che vedi cosa sta succedendo. Nel routing degli attributi è necessario specificare il Nome del percorso per recuperare la risorsa. Così il mia azione GET sembra che questo:

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

E poi nel cambiamento azione POST il CreatedAtRoute da:

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

A tal:

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