- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在 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 中还有两种消息处理管道。一种是常规管道,其中对所有路由的所有请求都通过,另一种是可以仅具有特定于特定路由的消息处理程序。
尝试创建一个 DelegatingHandler
并将其添加到您的 HttpConfiguration
的消息处理程序列表中:
config.MessageHandlers.Add(new HandlerA())
如果您想添加路由特定的消息处理程序,那么您可以执行以下操作:
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/
我正在尝试模拟 HttpMessageHandler 以便使用 HttpClient 测试类。 模拟似乎有效并且结果不错,但是当验证方法 SendAsunc 被调用的次数时,它返回 0 而不是 1..
我需要根据使用应用程序的最终用户在应用程序运行时传递网络凭据以模拟域用户。我无法弄清楚如何通过与单个用户相关联的 Services.AddHttpClient 和 HttpClientFactory
DelegatingHandler继承自 HttpMessageHandler .但是,我不明白其中的区别,因为您必须实现相同的方法,SendAsync使两者都起作用。 这两个处理程序有什么区别?我应
如果我在 HttpMessageHandler 中有一个异步调用,它是否应该使用 .ConfigureAwait 方法,例如 /// /// Handler to assign the MD5 ha
我在类库中有一个自定义的 DelegatingHandler,我需要用 Autofac 注册它。 webapi 宿主解决了它对运行时的依赖,因此宿主没有对该库的引用。 public class Loc
HttpClient需要 HttpMessageHandler它的两个构造函数中的参数。 有没有什么简单的方法可以在创建 HttpClient 之后更改处理程序而不创建新的 HttpClient 实例
对于基本身份验证,我已经实现了自定义 HttpMessageHandler基于 Darin Dimitrov 的答案中显示的示例:https://stackoverflow.com/a/1153634
在 ASP.NET 4.5 MVC 4 Web API 项目中,我想添加自定义 HttpMessageHandler。我更改了 WebApiConfig 类(在\App_Satrt\WebApiCon
在决定我想为测试发回什么样的响应之前,有没有办法获取http请求的内容?多个测试将使用此类,每个测试将有多个 http 请求。此代码无法编译,因为 lambda 不是异步的,并且其中有一个等待。我是
我有一个单元测试,它通过传入 HttpRequestMessage 实例并接收返回的 HttpResponseMessages 实例来调用类库。在这方面,它与测试 WebApi ApiControll
我在 .NET Core 2.1 应用程序上有一份夜间工作,向 https://server/api/values 发出请求此请求应该从服务器到服务器本身完成(一种 TestServer 行为),没有
我有一个使用 HttpClient 的控制台应用程序发出网络请求。 var client = new HttpClient(); 我正在尝试添加多个 HttpMessageHandler到它( Del
作为我正在处理的 ASP.Net Core 项目的一部分,我需要从我的 WebApi 中与许多不同的基于 Rest 的 API 端点进行通信。为了实现这一点,我使用了许多服务类,每个服务类都实例化一个
看来这两者有着相似的目的。如果能看到一些示例,了解何时使用其中一种的优点和缺点,并指出主要区别是什么,那就太好了。 最佳答案 The major difference between their tw
尝试在 StructureMap ala 中定义一个 HttpClient 单例: For().Singleton().UseIfNone(); 这会导致运行时出现以下错误(依赖注入(inject)时
对于开发人员, 我会 mock HttpMessageHandler 来测试 HttpClient,我的问题是我将如何根据 URL 和 Http 方法?所以响应将是方法和 URL 的函数: Get +
我在工厂注册我的 HttpClient: services.AddHttpClient() .SetHandlerLifetime(TimeSpan.FromMinutes(2)); 这个 I
请任何人告诉我以下三个模块如何在 asp.net Web API 2.1 中协同工作 欧文中间件 HttpMessageHandler(或 DelegatingHandler) 异常处理程序 我正在尝
在不使用 ASP.NET Core 的 DI 的情况下,您可以使用其构造函数将包含 cookie 容器的 ClientHandler 放入 HttpClient 对象中,类似于以下内容:
我是一名优秀的程序员,十分优秀!