2009-12-11 15 views
19

Bunu biraz araştırıyorum ama bir cevapla karşılaşmadım - web.config dosyasına eklemeden bir HttpHandler programını bir ASP.NET web sitesine eklemenin bir yolu var mı? Bir HttpHandler ekleyerek.NET'te HttpHandler programsal olarak eklemek için herhangi bir yolu?

+0

ilginç id bu kendim mümkün olup olmadığını görmek ister: kullanarak Asp.Net Webforms sonra burada açıklandığı gibi Webapp web.config UrlRouting yapılandırmaya sahip olmak durumunda. Merak et, neden sadece web.config eklemiyorsun? Bu, yalnızca tek siteyi/uygulamayı değil, tüm IIS – Jammin

cevap

18

Sana yapılandırma dosyalarını

<system.web> 
    <httpHandlers>...</httpHandler> 
</system.web> 

isteği sırasında doğrudan IHttpHandler ekleyerek, otomatik olarak kontrol etmek için bir yol yoktur demek varsayalım.

private void context_PostMapRequestHandler(object sender, EventArgs e) 
{ 
    HttpContext context = ((HttpApplication)sender).Context; 
    IHttpHandler myHandler = new MyHandler(); 
    context.Handler = myHandler; 
} 

Ve bu otomatik olarak bu istek için işleyici ayarlarsınız: Yani PostMapRequestHandler in the Application Lifecycle üzerine, kendi özel IHttpModule yılında aşağıdakileri yapardı. Muhtemelen, fiil, fiil vb. Gibi şeyleri kontrol etmek için bunu bir mantık içinde sarmak isteyebilirsiniz. Ama bu nasıl yapılır. pre built configuration handler that the web.confi gr uzak, gizli gelmez ve erişilebilir olması görünmüyor kullanarak Maalesef olsa

http://urlrewriter.codeplex.com

: Ayrıca, bu birçok popüler URL Rewriters gibi çalışır nasıl. IHttpHandlerFactory adlı bir arabirime dayanır. Sadece bir başlangıç ​​noktası yerine bir işleme noktası olarak kullanılır

Güncelleme tıpkı diğer ıhttphandler gibi kullanılabilir IHttpHandlerFactory. Bu makaleye bakın. Bir IRouteHandler sınıfını kullanarak

http://www.uberasp.net/getarticle.aspx?id=49

+0

'u etkiler. Teşekkürler Nick - tam olarak aradığım şey budur. –

+0

Bu yaklaşımın durumum için çalışmasında sorun yaşamak. Bir işleyiciyi yeniden atamaya çalıştığım istekler, fiziksel dosyalara veya yapılandırılmış yollardan herhangi birine uymuyor. İsteğinizi eşlemek için hiçbir işleyici bulunmadığından PostMapRequestHandler'ın davamda ateş etmemesi gerekir mi? Bu istekleri tetikleyen son olay "PostResolveRequestCache" ve "context.Handler" işlevini bu ya da herhangi bir önceki olay işleyicisinde sıfırlamaya çalışırsa, göz ardı edilir. – Lobstrosity

+0

“BeginRequest” olay işleyicisinde 'context.RemapHandler()' ('context.Handler' öğesini ayarlamak yerine) 'yi çağırarak çalışmayı başarabildim. – Lobstrosity

10

yapabilirsiniz.

  1. 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; 
        } 
    } 
    

    IRouteHandler Uygulamak

/rotanızı Kayıt yeni sınıfta IRouteHandler arabirimini uygular ve GetHttpHandler yöntemle

  • sonucunda kroşe dönmek Kayıt ol Rota:

    //from global.asax.cs 
    protected void Application_Start(object sender, EventArgs e) 
    { 
        RouteTable.Routes.Add(new Route 
        (
         "myHander.axd", 
         new myHandler() 
        )); 
    } 
    

    Not: Use Routing with Web Forms

  • +0

    Teşekkürler! Tam olarak ihtiyacım olan şey ... – rocky

    İlgili konular