W projekcie ASP.NET 4.5 MVC 4 Web API chcę dodać niestandardowy HttpMessageHandler
. Zmieniłem WebApiConfig
klasę (w \ App_Satrt \ WebApiConfig.cs), w następujący sposób:Jak zaimplementować HttpMessageHandler w Web API?
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()
);
}
}
Potem rozwinął 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());
}
}
Jednakże wniosek do API (powiedzmy http://mylocalhost.com/api/values) , zawsze zwraca kod stanu 200, bez żadnych danych. Mam na myśli, że nigdy nie dostaje się do metody "GET()" ValuesController.cs.
Co przeoczyłem? Jak mogę poprawnie wdrożyć HttpMessageHandler
?
PS: Przeczytałem już: https://stackoverflow.com/a/12030785/538387, nie pomaga mi.
Dziękuję. Rozwiązanie (1) działa dobrze. Ale numer 2, 'new HttpControllerDispatcher()' mówi: ** System.Web.Http.Dispatcher.HttpControllerDispatcher nie zawiera konstruktora, który przyjmuje 0 argumentów ** - Aktualizacja: Poprawiłem twój kod. Dziękuję Ci. – Tohid
zaktualizowałem mój powyższy post too.thanks. –
Należy również dodać tę część odpowiedzi Cuong Le do odpowiedzi: ** Aby napisać niestandardową procedurę obsługi komunikatów, należy wyprowadzić z 'System.Net.Http.DelegatingHandler'. ** – Tohid