Ho cercato un po 'questo, ma non ho trovato una risposta: esiste un modo per aggiungere un HttpHandler a un sito Web ASP.NET in modo programmatico senza aggiungerlo a web.config?Un modo per aggiungere HttpHandler a livello di programmazione in .NET?
risposta
Con l'aggiunta di un HttpHandler suppongo che voi dire i file di configurazione
<system.web>
<httpHandlers>...</httpHandler>
</system.web>
C'è un modo per controllare automaticamente, aggiungendo il IHttpHandler
in diretta durante la richiesta. Così il PostMapRequestHandler in the Application Lifecycle, si dovrebbe effettuare le seguenti operazioni, in tue IHttpModule
:
private void context_PostMapRequestHandler(object sender, EventArgs e)
{
HttpContext context = ((HttpApplication)sender).Context;
IHttpHandler myHandler = new MyHandler();
context.Handler = myHandler;
}
E questo dovrebbe impostare automaticamente il gestore per tale richiesta. Ovviamente probabilmente vorrai concludere questo in qualche logica per verificare cose come verbo, url di richiesta, ecc. Ma questo è come si farebbe. Anche questo è il numero di Rewriters URL popolari funzionano come ad esempio:
http://urlrewriter.codeplex.com
Purtroppo, però, con il pre built configuration handler that the web.confi g fa, è nascosto e non sembra essere accessibile. Si basa su un'interfaccia chiamata IHttpHandlerFactory
.
Aggiornamento Il IHttpHandlerFactory
può essere usato come qualsiasi altro IHttpHandler, solo che viene utilizzato come punto di partenza, invece di un punto di trasformazione. Vedi questo articolo.
Grazie Nick: questo è esattamente quello che stavo cercando. –
Problemi a ottenere questo approccio al lavoro per la mia situazione. Le richieste che sto tentando di riassegnare a un gestore per non corrispondono a file fisici oa nessuno dei miei percorsi configurati. 'PostMapRequestHandler' non sta sparando nel mio caso in quanto non viene trovato nessun gestore per mappare la richiesta? Sembra che l'ultimo evento che spara per queste richieste sia 'PostResolveRequestCache' e se provo a resettare' context.Handler' in quello o in qualsiasi altro gestore di eventi precedenti, viene semplicemente ignorato. – Lobstrosity
Sono riuscito a farlo funzionare chiamando 'context.RemapHandler()' (invece di impostare 'context.Handler' direttamente) nel gestore di eventi' BeginRequest'. – Lobstrosity
È possibile utilizzando una classe IRouteHandler.
- Implementare l'interfaccia IRouteHandler di una nuova classe e restituire la curva come il risultato della sua
GetHttpHandler
metodo - Registra il percorso/
Implementare IRouteHandler
public class myHandler : IHttpHandler, IRouteHandler
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
// your processing here
}
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return this;
}
}
Percorso di registrazione:
//from global.asax.cs
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(new Route
(
"myHander.axd",
new myHandler()
));
}
Nota: se utilizzando ASP.NET Webforms quindi assicurare il vostro webapp ha la configurazione UrlRouting nel web.config come spiegato qui: Use Routing with Web Forms
Grazie! Esattamente quello di cui avevo bisogno ... – rocky
- 1. C'è un modo per codificare LaunchScreen a livello di programmazione
- 2. Aggiungere testo all'immagine in Android a livello di programmazione
- 3. Aggiungere UIScrollView in UIView a livello di programmazione
- 4. Come aggiungere nodi in DevExpress TreeList a livello di programmazione?
- 5. Aggiungere risorse a Jetty a livello di programmazione
- 6. Aggiungere ruolo all'utente in Liferay a livello di programmazione
- 7. Il modo migliore per installare IIS7 a livello di programmazione
- 8. , verificare a livello di programmazione
- 9. aggiungere annotazioni di dati al livello di programmazione
- 10. Come aggiungere le viste alle viste a livello di programmazione
- 11. aggiungere i vincoli al livello di programmazione
- 12. Come aggiungere la macro excel 2010 a livello di programmazione
- 13. .NET MVC 3 Layout a livello di programmazione
- 14. Ingrandire un MKMapView a livello di programmazione
- 15. Come aggiungere un'immagine da visualizzare a livello di programmazione?
- 16. rinominare il computer a livello di programmazione C# .net
- 17. Javascript - aggiungi seleziona a livello di programmazione
- 18. Come creare un menu a livello di programmazione in Android?
- 19. C'è un modo per scoprire a livello di programmazione specifiche sulla GPU di un dispositivo Android?
- 20. Aggiungi un nuovo elemento a recyclerview a livello di programmazione?
- 21. Timeout a livello di programmazione di un test in MSTest
- 22. Pulsante Aggiungi a un layout a livello di programmazione
- 23. Come posso aggiungere più fonti a un tag audio HTML5, a livello di programmazione?
- 24. Qual è un buon modo per controllare una fisarmonica angolare-ui a livello di programmazione?
- 25. Come aggiungere un riferimento di assembly a un progetto al livello di programmazione?
- 26. Modifica lingua app a livello di programmazione
- 27. Ridimensionamento di un pulsante in iOS a livello di programmazione
- 28. Come impostare windowDrawsSystemBarBackgrounds a livello di programmazione?
- 29. Ordinamento di JTable a livello di programmazione
- 30. Come creare un modulo di Windows a livello di programmazione?
Intresting, id piace vedere se questo è possibile solo. Curioso però, perché non aggiungerlo semplicemente a web.config? in quanto ciò influenza solo l'unico sito/app non tutti IIS – Jammin