Я использовал две разные функции Azure для общения друг с другом: одна - HttpTrigger, содержащаяся в одной службе приложения, а другая - TimerTrigger, находящаяся в другой службе приложения.HttpTrigger использует аутентификацию на уровне функций.
Вот моя функция HttpTrigger:
[FunctionName("PendingOrders")]
public static async Task<HttpResponseMessage> GetPendingOrderIds(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = "pending-orders")]
HttpRequestMessage req,
TraceWriter log,
[Inject] OrdersController controller)
{
Вызов его с помощью главного ключа работает в браузере, но не с RestSharp.Единственное, что я изменил после предыдущего развертывания, - это обновление RestSharp с 106.3.1 до 106.6.9.Не является изменением основной версии, поэтому не должно быть никаких критических изменений.
private static IRestResponse ProcessRequest(string url, Method method, object requestBody)
{
// Variable "url" is the path plus `?code=<master key here>
var client = PrepareRequest(url, method, requestBody); // see below
return client.Execute(); // executes here, returns 401 Unauthorized.
}
private static PreparedClient PrepareRequest(string url, Method method, object requestBody)
{
var uri = new Uri(url);
var client = new RestClient(uri.GetLeftPart(UriPartial.Authority));
var request = new RestRequest(uri.PathAndQuery, method)
{
OnBeforeDeserialization = resp =>
{
resp.ContentType = "application/json";
}
};
if (requestBody != null)
{
request.AddJsonBody(requestBody);
}
return PreparedClient.Prepare(client, request);
}
Где PreparedClient равен
internal struct PreparedClient
{
public IRestClient Client { get; private set; }
public IRestRequest Request { get; private set; }
public static PreparedClient Prepare(IRestClient client, IRestRequest request)
{
var prepared = new PreparedClient { Client = client, Request = request };
return prepared;
}
public IRestResponse Execute()
{
return Client.Execute(Request);
}
public async Task<IRestResponse> ExecuteAsync()
{
return await Client.ExecuteTaskAsync(Request);
}
}
Я отладил код и убедился, что мастер ?code=xxx
ключ добавляется в URL.Есть ли другой способ аутентификации, который мне нужно использовать, который изменился между RestSharp 106.3.1 и 106.6.9?Нужно ли что-то вставлять в заголовки?