मैं इस पर थोड़ा सा शोध कर रहा हूं लेकिन उत्तर में नहीं आया है - क्या वेब.कॉन्फिग को जोड़ने के बिना प्रोग्रामिंग रूप से एक एएसपी.नेट वेबसाइट पर एचटीपीएचंडलर जोड़ने का कोई तरीका है?.NET में प्रोग्रामेटिक रूप से HttpHandler जोड़ने का कोई तरीका?
उत्तर
एक 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;
}
और वह स्वचालित रूप से उस अनुरोध के लिए हैंडलर स्थापित करेगा। जाहिर है, आप शायद कुछ तर्कों में इसे क्रिया के रूप में जांचने, यूआरएल का अनुरोध करने आदि के लिए लपेटना चाहते हैं, लेकिन ऐसा ही किया जाएगा। ,
http://urlrewriter.codeplex.com
दुर्भाग्य से, हालांकि का उपयोग कर pre built configuration handler that the web.confi जी करता है, दूर छिपा हुआ है और सुलभ हो प्रतीत नहीं होता है: इसके अलावा इस कितने लोकप्रिय यूआरएल rewriters इस तरह के रूप में काम करते है। यह IHttpHandlerFactory
नामक इंटरफ़ेस पर आधारित है।
अद्यतनIHttpHandlerFactory
किसी भी अन्य IHttpHandler की तरह इस्तेमाल किया जा सकता है, केवल यह एक शुरूआत बिंदु के बजाय एक प्रसंस्करण बिंदु के रूप में प्रयोग किया जाता है। यह आलेख देखें।
सभी धन्यवाद निक - यह वही है जो मैं ढूंढ रहा था। –
मेरी स्थिति के लिए काम करने के लिए इस दृष्टिकोण को पाने में परेशानी हो रही है। अनुरोध जो मैं एक हैंडलर को फिर से सौंपने की कोशिश कर रहा हूं, भौतिक फाइलों या मेरे किसी भी कॉन्फ़िगर किए गए मार्गों के अनुरूप नहीं है। क्या मेरे पोस्ट में 'PostMapRequestHandler' फ़ायरिंग नहीं होगा क्योंकि अनुरोध को मैप करने के लिए कोई हैंडलर नहीं मिला है? ऐसा लगता है कि इन अनुरोधों के लिए आग लगने वाली आखिरी घटना 'PostResolveRequestCache' है और यदि मैं उस संदर्भ में' संदर्भ 'हैंडलर को रीसेट करने का प्रयास करता हूं या किसी भी पुराने ईवेंट हैंडलर में इसे अनदेखा कर दिया जाता है। – Lobstrosity
मैं 'BeginRequest' ईवेंट हैंडलर में' context.RemapHandler() '(' context.Handler' को सीधे सेट करने के बजाय) को कॉल करके इसे काम करने में सक्षम था। – Lobstrosity
आप कर सकते हैं एक IRouteHandler वर्ग का उपयोग करके।
- एक नया वर्ग में IRouteHandler इंटरफ़ेस को लागू है और इसके
GetHttpHandler
विधि - के परिणाम के रूप हाथ के बल्लेबाज वापस लौटकर अपना मार्ग रजिस्टर/
लागू 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 वेबफ़ॉर्म का उपयोग कर तो यह सुनिश्चित करता है, तो अपने webapp web.config में UrlRouting विन्यास है जैसा कि यहां बताया: Use Routing with Web Forms
धन्यवाद! वास्तव में मुझे क्या चाहिए ... – rocky
intresting, आईडी अगर यह अपने आप के लिए संभव है देखना पसंद है। हालांकि उत्सुक है, क्यों न सिर्फ इसे web.config जोड़ें? क्योंकि यह केवल एक साइट/ऐप को प्रभावित करता है IIS – Jammin