एएसपी.नेट 4.5 एमवीसी 4 वेब एपीआई प्रोजेक्ट में, मैं एक कस्टम HttpMessageHandler
जोड़ना चाहता हूं। इस प्रकार मैं (\ App_Satrt \ WebApiConfig.cs में) WebApiConfig
वर्ग बदल दिया है,:वेब एपीआई में HttpMessageHandler को कैसे कार्यान्वित करें?
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: null,
handler: new MyCustomizedHttpMessageHandler()
);
}
}
तब मैं MyCustomizedHttpMessageHandler
विकसित:
public class MyCustomizedHttpMessageHandler : HttpMessageHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
IPrincipal principal = new GenericPrincipal(
new GenericIdentity("myuser"), new string[] { "myrole" });
Thread.CurrentPrincipal = principal;
HttpContext.Current.User = principal;
return Task<HttpResponseMessage>.Factory.StartNew(() => request.CreateResponse());
}
}
हालांकि, एपीआई के लिए अनुरोध (मान लीजिए कि http://mylocalhost.com/api/values हैं) , किसी भी डेटा के बिना हमेशा स्टेटस कोड 200 लौटाता है। मेरा मतलब है कि यह ValuesController.cs की 'GET()' विधि को कभी नहीं मिलता है।
मुझे क्या याद आया? मैं HttpMessageHandler
को ठीक से कैसे कार्यान्वित कर सकता हूं?
पीएस: पहले से ही इसे पढ़ चुके हैं: https://stackoverflow.com/a/12030785/538387, मेरी मदद नहीं करता है।
धन्यवाद। समाधान (1) अच्छी तरह से काम करता है। लेकिन नंबर 2, 'नया एचटीपी कंट्रोलर डिस्पैचर()' कहता है: ** System.Web.Http.Dispatcher.HttpController डिस्पैचर में कोई कन्स्ट्रक्टर नहीं है जो 0 तर्क लेता है ** - अद्यतन: मैंने आपका कोड तय किया है। धन्यवाद। – Tohid
मैंने अपनी उपरोक्त पोस्ट भी अपडेट की। धन्यवाद। –
कृपया अपने उत्तर में कुओंग ले के उत्तर का यह हिस्सा भी जोड़ें: ** एक कस्टम संदेश हैंडलर लिखने के लिए, आपको 'System.Net.Http.DelegatingHandler' से प्राप्त होना चाहिए। ** – Tohid