2009-12-11 214 views
19

我一直在研究這一點,但沒有遇到一個答案 - 有什麼辦法可以編程方式將HttpHandler添加到ASP.NET網站而無需添加到web.config?以任何方式在.NET中以編程方式添加HttpHandler?

+0

Intresting,ID喜歡看,如果這是可能的自己。好奇的是,爲什麼不把它添加到web.config?因爲這隻影響一個網站/應用程序不是所有的IIS – Jammin 2009-12-11 13:26:26

回答

18

通過添加一個HttpHandler我想你指的是配置文件

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

有一種方法來自動控制的,由請求期間將直接在IHttpHandler。所以在PostMapRequestHandler in the Application Lifecycle,你會做到以下幾點,在自己的自定義IHttpModule

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

這將自動設置該請求的處理程序。很明顯,你可能想用一些邏輯來包裝它,以檢查諸如動詞,請求url等等的東西。但是這是如何完成的。另外這是許多流行的URL重寫器是如何工作的,如:

http://urlrewriter.codeplex.com

但不幸的是,使用pre built configuration handler that the web.confi克不會被隱藏起來似乎並沒有被訪問。它基於名爲IHttpHandlerFactory的界面。

更新IHttpHandlerFactory可以用來就像任何其他的IHttpHandler,只有它被用來作爲一個出發點,而不是一個加工點。看到這篇文章。

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

+0

感謝尼克 - 這正是我所期待的。 – 2009-12-11 14:21:26

+0

難以根據我的情況使用這種方法。我試圖重新分配處理程序的請求不符合物理文件或任何配置的路由。 PostMapRequestHandler不會在我的情況下觸發,因爲沒有處理程序被發現將請求映射到?看來這些請求觸發的最後一個事件是PostResolveRequestCache,如果我嘗試在該事件處理器或任何之前的事件處理器中重置context.Handler,它就會被忽略。 – Lobstrosity 2014-08-16 00:29:36

+0

我能夠通過調用'context.RemapHandler()'(而不是直接設置'context.Handler')在'BeginRequest'事件處理程序中得到它的工作。 – Lobstrosity 2014-08-16 22:15:34

10

您可以通過使用一個IRouteHandler類。

  1. 實現了一類新的IRouteHandler接口,並返回投手爲GetHttpHandler方法
  2. 的結果寄存器路線/

實施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; 
    } 
} 

註冊路線:

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

注意:如果使用Asp.Net Web表單,然後確保你的web應用已在web.config中UrlRouting配置,這裏說明:Use Routing with Web Forms

+0

謝謝!正是我需要的...... – rocky 2015-02-15 14:07:55

相關問題