Abbiamo un'applicazione ASP.NET di lunga durata nata nei giorni .NET 1.1/IIS6. Ora siamo su .NET4.5/IIS7 ma non abbiamo fatto nulla con MVC.Riscrittura URL in ASP.NET 4.5 e API Web
Noi forniamo un catalogo per i clienti e dare loro un URL che possono utilizzare:
www.ourhost.com/customername
Utilizzando un personalizzato IHttpModule abbiamo sviluppato noi tiriamo 'CustomerName' fuori l'URL per trovare il cliente nel database. L'ID di quel cliente viene quindi memorizzato nel contesto * della pagina e utilizzato praticamente da tutte le pagine del sito per personalizzare i contenuti per quel cliente. Dopo questo processo, quanto sopra URL verrebbe riscritta e trattati come
www.ourhost.com/index.aspx
con index.aspx avere accesso al ID del cliente tramite il suo contesto e che può fare la sua cosa.
Questo funziona perfettamente e supportiamo diverse migliaia di clienti. la logica di riscrittura è abbastanza complessa perché convalida gli account dei clienti, reindirizza a una pagina 'uh oh' se il cliente non è valido e a un'altra pagina 'Trova un rivenditore' se il cliente non ha pagato, ecc. ecc.
Ora mi piacerebbe costruire alcuni controller API Web e la riscrittura in stile MVC mi preoccupa. Vedo molti esempi in cui la riscrittura accade per rendere l'URL di come questo lavoro:
www.ourhost.com/api/{controller}
ma ho ancora bisogno di questi API Web 'chiama' per accadere nel contesto di un cliente. Le nostre pagine sono sempre più sofisticate con le chiamate asincrone JSON/AJAX, ma nel rispondere a queste chiamate ho ancora bisogno del contesto del cliente. Vorrei che l'URL di essere
www.ourhost.com/customername/api/{controller}
ma sono perplesso su come configurare il routing per fare questo e farlo giocare bene con la nostra IHttpModule.
È possibile?
* AGGIORNAMENTO: Quando dico "memorizzato nel contesto della pagina", intendo il HttpContext associato a ogni richiesta web che include un dizionario in cui posso memorizzare alcuni dati specifici per pagina/richiesta.
Quando dici "memorizzato nel contesto della pagina", ti riferisci ad un oggetto 'Session', o stai scrivendo direttamente su un' Cookie' di qualche tipo? Dato che hai taggato questo 'web-api', fa un po 'di differenza. –
@Troy: Grazie per il commento - Ho aggiornato la mia domanda con chiarimenti. – n8wrl
Capito - stai usando 'HttpContext.Current.User' per tenere traccia di chi è l'utente che ha effettuato l'accesso? Come stai persistendo nelle chiamate successive che non includono il nome utente dell'utente nell'URL? –