Ho un controller con la seguente firma:Web API parametri opzionali
[Route("products/filter/{apc=apc}/{xpc=xpc}/{sku=sku}")]
public IHttpActionResult Get(string apc, string xpc, int? sku)
{ ... }
Io chiamo questo metodo con i seguenti URI:?
- ~/api/prodotti/filtro APC = AA & XPC = BB
- ~/api/prodotti/filtro? sku = 7199123
La prima URI funziona senza alcun problema. Il secondo ha uno strano effetto collaterale. Anche se i valori predefiniti per apc e xpc dovrebbero essere nulli se non forniti, i parametri sono in realtà i loro nomi. Posso superare questo con l'aggiunta della logica aggiuntiva:
apc = (apc == "apc") ? null : apc;
xpc = (xpc == "xpc") ? null : xpc;
Questo mi sembra un hack, e sarebbe problematico se il valore passato è stato sempre uguale al nome del parametro.
C'è un modo per definire il percorso senza questo effetto collaterale?
Hai fornito valori predefiniti nel modello di percorso. Perché dovresti aspettarti che siano "nulli"? –
Ho pensato {sku = sku} mappato il parametro nella stringa di query al parametro method. – Josh
È necessario rivedere la [documentazione per il routing degli attributi] (http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2# opzionale). Mostra come rendere i parametri opzionali. –