asp.net-web-api
Instradamento degli attributi in WebAPI
Ricerca…
introduzione
Come suggerisce il nome, questo utilizza gli attributi per il percorso. Ciò fornisce all'utente un maggiore controllo sull'URI nella WebAPI. Ad esempio, è possibile descrivere le gerarchie della risorsa. Tuttavia, il precedente "routing convenzionale" è pienamente supportato. Gli utenti possono avere una combinazione di entrambi.
Sintassi
- [RoutePrefix ("api / books")] - per la classe controller
- [Route ("getById")] - per le azioni
- [Route ("~ / api / authors / {authorId: int} / books")] - per il prefisso del percorso prioritario
Parametri
| Nome del parametro | Dettagli |
|---|---|
| RoutePrefix | attributo alla classe controller. tutti i prefissi di url comuni nelle azioni sono bastonati qui. prende la stringa come input |
| Itinerario | attributo alle azioni del controller. ogni azione avrà una rotta assunta con (non necessariamente) |
| Rotta ( "~ / api /") | questo sovrascrive il prefisso del percorso |
Osservazioni
Attualmente, Attribute Routes non ha Controller specific Message Handlers . Poiché non è possibile specificare quale gestore eseguire per quale percorso al momento della dichiarazione. Questo è possibile nel Conventional Routing .
Routing degli attributi di base
Basta aggiungere un attributo all'azione del controller
[Route("product/{productId}/customer")]
public IQueryable<Product> GetProductsByCustomer(int productId)
{
//action code goes here
}
questo verrà interrogato come /product/1/customer e productId=1 verrà inviato all'azione del controller.
Assicurati che quello all'interno di "{}" e il parametro di azione siano gli stessi. productId in questo caso.
prima di usare questo, devi specificare che stai usando l'instradamento degli attributi per:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
}
}
Attributo prefisso di percorso
Nei casi in cui è necessaria una porzione comune della rotta per tutte le rotte all'interno di un controller, viene utilizzato l'attributo RoutePrefix .
Nell'esempio seguente, la parte di codice api / studenti è comune e quindi è possibile definire RoutePrefix ed evitare di utilizzarlo ripetutamente.
[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
}
}