Функции Azure и запрос HTTP OPTIONS - PullRequest
0 голосов
/ 11 декабря 2018

Я хочу, чтобы существующее приложение (которое я не контролирую) отправляло информацию в функцию Azure.

Приложение сначала отправляет запрос HTTP OPTIONS, а затем регулярно отправляет сообщения HTTP POST.

Проблема, с которой я столкнулся, заключается в том, что приложение ожидает заголовок «Allow: POST, OPTIONS» вответ от функции Azure на запрос OPTIONS.Если заголовок отсутствует, он не будет продолжаться (вместо этого выдается ошибка: «POST не разрешен»)

При попытке установить заголовок в функциях Azure я получаю следующее сообщение об ошибке

System.Net.Http: Misused header name. Make sure request headers are used with HttpRequestMessage, response headers with HttpResponseMessage, and content headers with HttpContent objects.

Я включил CORS для всех местоположений и разрешил все методы в конфигурации.

module.exports = function (context, req) 
{
    //context.log('JavaScript HTTP trigger function processed a request.');

    if (req.method == "OPTIONS") 
    {
            context.res = 
            {
                body: "",
                headers: 
                { 
                    //"Access-Control-Allow-Methods" : "POST,OPTIONS",
                    "allow" : "POST,OPTIONS"
                },
                status: 200,
            };
    }
    context.done();
}

В спецификации сказано, что для ответа 405 должен быть установлен заголовок Allow.Если заголовок пуст, ничего не разрешено.Однако логика не определена для случая, когда заголовок отсутствует вообще.

Существует ли метод, с помощью которого я могу отправить этот заголовок в ответ на HTTP-ОПЦИИ?

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Если вы редактируете это через портал, перейдите в раздел функции integrate и выберите методы POST и OPTIONS.

0 голосов
/ 12 декабря 2018

Ошибка ожидается.Время выполнения функции основано на C #, когда ответ пытается добавить заголовок Allow, базовый код C # проверяет его имя.По своему замыслу Allow является заголовком только для чтения в HttpContentHeaders , поэтому мы не можем добавить его в HttpResponseHeaders .

Вот два обходных пути, к которым вы можете обратиться.

  1. Используйте произвольное имя заголовка, например Allow-Method.

  2. Создатьновое приложение Function, по умолчанию оно использует Runtime 2.0, где мы можем установить заголовок Allow.

0 голосов
/ 11 декабря 2018

Вы пытались добавить разрешенные методы в файлы function.json , как указано в документации ?

Пример ниже:

   "authLevel": "anonymous",
   "type": "httpTrigger",
   "direction": "in",
   "name": "req",
   "methods": [
    "post",
    "options"
   ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...