gpt4 book ai didi

.net - 使用自定义 header 从 Azure 移动服务键入结果

转载 作者:行者123 更新时间:2023-12-03 01:52:12 25 4
gpt4 key购买 nike

当调用 Azure 移动服务时,我想向自定义 REST 服务发出请求,并将自定义 header 值一起传递并获取键入的结果。为什么我没有这个选项?我错过了什么?

查看https://msdn.microsoft.com/en-us/library/azure/microsoft.windowsazure.mobileservices.mobileserviceclient.invokeapiasync.aspx我只能在发出非类型化请求时提供自定义 header 。

最佳答案

由于对称性,没有添加需要额外 header 的重载:在类型化场景中,您可以为请求指定 header ,但无法读取响应中的 header (因为返回类型是 T 类型,不包含 header 集合)。

但是,您可以使用可传递给 MobileServiceClient 构造函数的消息处理程序来执行此操作的扩展方法。下面的代码是此类实现的示例。它只实现了两个类型化方法,但是如果您想添加其余的方法,那么实现就很简单了。

class Program
{
public static MobileServiceClient MobileService = new MobileServiceClient(
"https://YOUR-SERVICE.azure-mobile.net/",
"YOUR-APPLICATION-KEY"
);

static void Main(string[] args)
{
DoWork().Wait();
}

static async Task DoWork()
{
var httpHeaders = new Dictionary<string, string>
{
{ "x-header-1", "value 1" },
{ "x-header-2", "value 2" },
};
var test = await MobileService.InvokeApiWithHeaders<Test>("headers", httpHeaders);
Console.WriteLine("Returned by the service:");
foreach (var k in test.AllHeaderValues.Keys)
{
Console.WriteLine(" {0}: {1}", k, test.AllHeaderValues[k]);
}
}
}

public class Test
{
public Dictionary<string, string> AllHeaderValues { get; set; }
}

public static class TypedInvokeApiWithHeadersExtensions
{
public static Task<T> InvokeApiWithHeaders<T>(this MobileServiceClient client, string apiName, IDictionary<string, string> httpHeaders)
{
var client2 = new MobileServiceClient(client.ApplicationUri, client.ApplicationKey, new AddHeadersHandler(httpHeaders));
return client2.InvokeApiAsync<T>(apiName);
}

public static Task<T> InvokeApiWithHeaders<T>(this MobileServiceClient client, string apiName, HttpMethod method, IDictionary<string, string> httpHeaders, IDictionary<string, string> queryParameters)
{
var client2 = new MobileServiceClient(client.ApplicationUri, client.ApplicationKey, new AddHeadersHandler(httpHeaders));
return client2.InvokeApiAsync<T>(apiName, method, queryParameters);
}

class AddHeadersHandler : DelegatingHandler
{
IDictionary<string, string> headers;
public AddHeadersHandler(IDictionary<string, string> headers)
{
this.headers = headers;
}
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
foreach (var header in headers)
{
request.Headers.TryAddWithoutValidation(header.Key, header.Value);
}

return base.SendAsync(request, cancellationToken);
}
}
}

关于.net - 使用自定义 header 从 Azure 移动服务键入结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34612054/

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