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?
cevap
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
'u etkiler. Teşekkürler Nick - tam olarak aradığım şey budur. –
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
“BeginRequest” olay işleyicisinde 'context.RemapHandler()' ('context.Handler' öğesini ayarlamak yerine) 'yi çağırarak çalışmayı başarabildim. – Lobstrosity
yapabilirsiniz.
-
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
//from global.asax.cs
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(new Route
(
"myHander.axd",
new myHandler()
));
}
Teşekkürler! Tam olarak ihtiyacım olan şey ... – rocky
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