Trong dự án ASP.NET MVC 4 Web API, tôi muốn thêm một tuỳ chỉnh HttpMessageHandler
. Tôi đã thay đổi WebApiConfig
lớp (trong \ App_Satrt \ WebApiConfig.cs), như sau:Cách triển khai HttpMessageHandler trong API Web?
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()
);
}
}
Sau đó, tôi phát triển 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());
}
}
Tuy nhiên, yêu cầu đến API (giả sử http://mylocalhost.com/api/values) , luôn trả về mã trạng thái 200, không có bất kỳ dữ liệu nào. Tôi có nghĩa là nó không bao giờ được phương thức 'GET()' của ValuesController.cs.
Tôi đã bỏ lỡ điều gì? Làm cách nào để triển khai HttpMessageHandler
đúng cách?
PS: Đã đọc tài liệu này: https://stackoverflow.com/a/12030785/538387, không giúp tôi.
Cảm ơn bạn. Giải pháp (1) hoạt động tốt. Nhưng số 2, 'new HttpControllerDispatcher()' nói: ** System.Web.Http.Dispatcher.HttpControllerDispatcher không chứa hàm tạo 0 tham số ** - Cập nhật: Tôi đã sửa mã của bạn. Cảm ơn bạn. – Tohid
tôi đã cập nhật bài đăng trên của tôi too.thanks. –
Ngoài ra, hãy thêm phần này của câu trả lời của Cường Lê vào câu trả lời của bạn: ** Để viết một trình xử lý tin nhắn tùy chỉnh, bạn nên lấy từ 'System.Net.Http.DelegatingHandler'. ** – Tohid