utilizzando le librerie System.ServiceModel per il routing, Ho un servizio REST con un semplice modello che assomigliaE 'possibile avere un parametro url REST con una e commerciale?
"{} searchTerm? Optare = {} someSearchOpt
Quindi la chiamata apparirebbe come:
per cercare fo r la frase "spedizioni fluviali" senza opzioni.
Questo semplicemente accetta una frase di ricerca e restituisce risultati. Funziona bene. Tuttavia, se la ricerca di una frase che contiene quel carattere, come ad esempio "Lewis & Clark", ho provato l'ovvio di URL che codifica per il commerciale
Lewis% 26Clark
ma anche così la richiesta non è mai nemmeno instradato, ma il server restituisce immediatamente 400 Bad Request. È chiaro che viene interpretato come un delimitatore di stringhe di query e rende invalida la richiesta poiché questo particolare modello si aspetta un parametro url e non ha il precedere "?" delimitatore.
Poiché queste frasi di ricerca possono avere altri caratteri limitati, sono previsti dall'URL codificato dal client e quando vengono instradati correttamente, l'API REST chiama HttpUtility.UrlDecode sul parametro. Quindi la mia domanda è davvero se ci sia qualche tecnica per ottenere una e commerciale di e codifica url correttamente indirizzata come parametro di rest url e non interpretata e rifiutata preventivamente come un delimitatore di stringhe di query?
Aggiornamento: per la cronologia, se il termine di ricerca era previsto come parametro stringa di query (non un parametro url), l'invio di Lewis% 26Clark funziona correttamente. Per esempio
http://myhost.contoso.com/searchapi?searchTerm=lewis%26clark
Quindi, per chiarire, io sto cercando di ottenere lo stesso risultato quando si utilizza un parametro URL in un modello REST.
+1. Attendi fino a quando non avrai bisogno di codificare le barre ... Sysmem.Uri "disponibile" li disimpegna tutti senza essere chiesto come "funzionalità" di sicurezza. – Cameron
Non è presente alcuna stringa di query nel campione ... Non sono sicuro se mi manca qualcosa ... –
@alexei ... esattamente il punto ... è un api REST, e quindi il termine di ricerca è un parametro url , non un parametro stringa di query ... un esempio più comune è 'http: // myhost.contoso.com/restapi/customer/3' dove" 3 "è un parametro url. Nel mio esempio, il parametro di stringa di query "opt" è facoltativo e può essere escluso. – mdisibio