在我的.net框架web应用中设置了对批处理请求的支持后。每个单独的请求都返回禁止,即使我将我的持有者令牌复制到每个单独的请求也是如此。我对My batch支持的集成测试如下--我的ServerHelper代码添加了请求的持有者令牌。
[TestMethod]
public async Task BatchRequestTest()
{
var requestMessage = new HttpRequestMessage(HttpMethod.Get, ServerHelper.HttpClient.BaseAddress + "values/22");
requestMessage.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", await ServerHelper.GetAccessToken());
var getMetricsRequest = new HttpMessageContent(requestMessage);
var getTransactionsRequest1 = new HttpMessageContent(new HttpRequestMessage(HttpMethod.Get, ServerHelper.HttpClient.BaseAddress + "values/23"));
var failingRequest = new HttpMessageContent(new HttpRequestMessage(HttpMethod.Get, ServerHelper.HttpClient.BaseAddress + "values/77"));
MultipartContent content = new MultipartContent("mixed", "batch_" + Guid.NewGuid().ToString());
content.Add(getMetricsRequest);
content.Add(getTransactionsRequest1);
content.Add(failingRequest);
HttpRequestMessage batchRequest = new HttpRequestMessage(HttpMethod.Post, ServerHelper.HttpClient.BaseAddress + "batch")
{
Content = content
};
var response = await ServerHelper.HttpClient.SendAsync(batchRequest);
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);//assert true
var responseContents = await response.Content.ReadAsMultipartAsync();
var get1 = await responseContents.Contents[0].ReadAsHttpResponseMessageAsync();
var get2 = await responseContents.Contents[1].ReadAsHttpResponseMessageAsync();
var get3 = await responseContents.Contents[2].ReadAsHttpResponseMessageAsync();
Assert.AreEqual(HttpStatusCode.OK, get1.StatusCode);//assert fail
Assert.AreEqual(HttpStatusCode.OK, get2.StatusCode);//assert fail
Assert.AreEqual(HttpStatusCode.NotFound, get3.StatusCode);
}我负责添加批处理支持的配置的一部分:
var server = new HttpServer(httpConfiguration);
appBuilder.UseWebApi(server);
httpConfiguration.Routes.MapHttpBatchRoute(
routeName: "batch",
routeTemplate: "batch",
batchHandler: new DefaultHttpBatchHandler(server)
{
ExecutionOrder = BatchExecutionOrder.NonSequential
}
);我需要在我的管道中添加一些东西吗?
发布于 2017-10-16 19:33:07
请注意,您已将Authorization头添加到另一个名为requestMessage的本地变量中。尝试将authorization头添加到batchRequest变量和/或使用requestMessage作为构造函数参数创建其他HttpMessageContent实例。
发布于 2017-12-01 21:59:55
今天遇到了这个问题,所以我想我会发布一个解决方案,以防其他人对此感到好奇。您可以通过扩展DefaultHttpBatchHandler来创建自定义批处理程序。然后,您可以在其中设置子请求的授权头。
public class AuthorizationBatchHandler : DefaultHttpBatchHandler
{
public AuthorizationBatchHandler(HttpServer httpServer) : base(httpServer)
{
}
public override async Task<IList<HttpRequestMessage>> ParseBatchRequestsAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var requests = await base.ParseBatchRequestsAsync(request, cancellationToken);
foreach (var childRequest in requests)
{
childRequest.Headers.Authorization = request.Headers.Authorization;
}
return requests;
}
}然后将其连接到启动方法中,如下所示:
httpConfiguration.Routes.MapHttpBatchRoute(
routeName: "batch",
routeTemplate: "batch",
batchHandler: new AuthorizationBatchHandler(server));这就是所有要做的事情。
https://stackoverflow.com/questions/46768179
复制相似问题