Функции Azure 401 Несанкционированная проблема с RestSharp - PullRequest
0 голосов
/ 03 июля 2019

Я использовал две разные функции 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?Нужно ли что-то вставлять в заголовки?

...