gpt4 book ai didi

c# - 如何在 Web API 中实现 HttpMessageHandler?

转载 作者:可可西里 更新时间:2023-11-01 03:05:49 25 4
gpt4 key购买 nike

在 ASP.NET 4.5 MVC 4 Web API 项目中,我想添加自定义 HttpMessageHandler。我更改了 WebApiConfig 类(在\App_Satrt\WebApiConfig.cs 中),如下所示:

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());
}
}

但是,对 API 的请求(比方说 http://mylocalhost.com/api/values )总是返回状态代码 200,没有任何数据。我的意思是它永远不会到达 ValuesController.cs 的“GET()”方法。

我错过了什么?如何正确实现 HttpMessageHandler

PS:已经读过这个:https://stackoverflow.com/a/12030785/538387 , 对我没有帮助。

最佳答案

在这里,您正在创建一个 HttpMessageHandler,它将请求短路并且不让请求通过管道的其余部分。相反,您应该创建一个 DelegatingHandler

Web API 中还有两种消息处理管道。一种是常规管道,其中对所有路由的所有请求都通过,另一种是可以仅具有特定于特定路由的消息处理程序。

  1. 尝试创建一个 DelegatingHandler 并将其添加到您的 HttpConfiguration 的消息处理程序列表中:

    config.MessageHandlers.Add(new HandlerA())
  2. 如果您想添加路由特定的消息处理程序,那么您可以执行以下操作:

    config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional },
    constraints: null,
    handler:
    HttpClientFactory.CreatePipeline(
    new HttpControllerDispatcher(config),
    new DelegatingHandler[]{new HandlerA()})
    );

This Web Api Poster显示管道流。

关于c# - 如何在 Web API 中实现 HttpMessageHandler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15204257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com