Parametri facoltativi dell’API Web

Ho un controller con la seguente firma:

[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

Il primo URI funziona senza problemi. 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 aggiungendo la logica aggiuntiva:

 apc = (apc == "apc") ? null : apc; xpc = (xpc == "xpc") ? null : xpc; 

Questo sembra un trucco e sarebbe problematico se il valore passato fosse sempre uguale al nome del parametro.

C’è un modo per definire la Route senza questo effetto collaterale?

L’avevo capito. Stavo usando un cattivo esempio che ho trovato nel passato su come mappare la stringa di query sui parametri del metodo.

Nel caso in cui qualcuno ne abbia bisogno, per avere parametri opzionali in una stringa di query come:

  • ~ / Api / prodotti / filtro? APC = AA & XPC = BB
  • ~ / Api / prodotti / filtro? Sku = 7199123

useresti:

 [Route("products/filter/{apc?}/{xpc?}/{sku?}")] public IHttpActionResult Get(string apc = null, string xpc = null, int? sku = null) { ... } 

Sembra strano dover definire i valori predefiniti per i parametri del metodo quando questi tipi hanno già un valore predefinito.

Sku è un int, non può essere predefinito per la stringa “sku”. Controlla i parametri URI opzionali e i valori predefiniti