Sto cercando di implementare sia Attribute Routing e VersionedRoute
da RoutingConstaints Sample ma quando uso entrambi su un controller, l'attributo versioned non funziona più.API Web Api 2 che non riconosce più attributi per il routing (Versioning)
Che cosa avrei bisogno di modificare sull'attributo per farlo funzionare bene con Attribute Routing?
Ad esempio di codice scaricare il progetto di esempio (o semplicemente guardare i pochi file dal link qui sotto) e quindi modificare i percorsi in quanto tale:
// When I use the RoutePrefix, VersionedRoute no longer works (Sending "Api-Version" through http header doesn't route correctly
// If I remove the RoutePrefix I can use VersionedRoute again
// What do I need to change in its code to be able to use both?
[VersionedRoute("api/Customers", 1)] // This route would be used as http://url/api/customers with a header of "api-version: 1"
[RoutePrefix("api/v1/Customers")] // This route would be used purely through url versioning of http://url/api/v1/Customers
public class CustomersV1Controller : ApiController {
/* Other stuff removed */
[VersionedRoute("api/Customer", 1)] // I'd rather not have to use this here at all and just use a single one on the class, but having both nor just one on either works right now.
[Route("")]
public IHttpActionResult Get()
{
return Json(_customers);
}
}
Edit : Per favore fatemi sapere se avete bisogno di ulteriori informazioni o anche postare idee o cose da provare :)
Edit2: Ecco un n esempio di quello che sto cercando di fare dal blog di Troy Hunt: http://www.troyhunt.com/2014/02/your-api-versioning-is-wrong-which-is.html
Edit3: Ecco cosa vorrei codice per essere il più vicino in quanto ridurrebbe un sacco di overhead e stringhe magiche.
[VersionedRoute("api/Customers", 1)] // This route would be used as http://url/api/customers with a header of "api-version: 1"
[RoutePrefix("api/v1/Customers")] // This route would be used purely through url versioning of http://url/api/v1/Customers
public class CustomersV1Controller : ApiController {
/* Other stuff removed */
[Route("")]
public IHttpActionResult Get()
{
// Removed
return Ok(customers);
}
[Route("{id:int}")]
public IHttpActionResult GetById(int id)
{
// Removed
return Ok(customer);
}
}
[VersionedRoute("api/Customers", 2)] // This route would be used as http://url/api/customers with a header of "api-version: 2"
[RoutePrefix("api/v2/Customers")] // This route would be used purely through url versioning of http://url/api/v2/Customers
public class CustomersV2Controller : ApiController {
/* Other stuff removed */
[Route("")]
public IHttpActionResult Get()
{
// Removed
return Ok(customersThatAreDifferentThanV1);
}
[Route("{id:int}")]
public IHttpActionResult GetById(int id)
{
// Removed
return Ok(customerThatIsDifferent);
}
}
Edit: Ultimo urto, cercando di solo devono scrivere le informazioni sulla versione percorso una volta per tratta, a livello di attributo di controllo e non per-action.
Che cosa stai cercando di fare esattamente? – DavidG
@DavidG Sto provando ad usare sia 'VersionedRoute (" Customer ", 1)' che mi permetterebbe di usare le intestazioni http per fornire la versione #, sia l'uso di un 'RoutePrefix (" v1/Customer/")' per il controllo delle versioni tramite l'URL. Fondamentalmente voglio supportare sia la versione di intestazione che quella di url. Tuttavia quando applico 'RoutePrefix' l'attributo' VersionedRoute' smette di funzionare. – John
Come appare la tua configurazione durante l'impostazione del progetto? – entropic