Приложение-функция Azure выполняется, когда сделан запрос OPTIONS?
Я создал функциональное приложение с помощью портала Azure. Я проверил POST и OPTIONS как разрешенные методы. Я удалил настройки CORS по умолчанию и разрешил *. Теперь, когда я выполняю запрос OPTIONS с помощью клиента REST, я получаю сообщение об ошибке. Я проверил логи и обнаружил следующее. Мой вопрос: звучит так, как будто моя функция выполняется, и когда заголовок авторизации и / или полезная нагрузка не найдены, выдается ошибка. Может быть, я не понимаю запрос ОПЦИИ. Какие варианты можно предотвратить в приложении-функции портала Azure?
ТИА за любую помощь.
2019-05-17T09:16:26.479 [Info] Executing HTTP request: {
"requestId": "38609669-59f4-4ded-9685-ef67af3c2909",
"method": "OPTIONS",
"uri": "/api/ProcessEntries"
}
2019-05-17T09:16:26.479 [Info,ProcessEntries] Function started (Id=41b4691d-98ec-432f-8e6e-de1e1dcd13b6)
2019-05-17T09:16:26.479 [Info,ProcessEntries] Executing 'Functions.ProcessEntries' (Reason='This function was programmatically called via the host APIs.', Id=41b4691d-98ec-432f-8e6e-de1e1dcd13b6)
2019-05-17T09:16:26.495 [Error] A ScriptHost error has occurred
2019-05-17T09:16:26.495 [Error] Cannot perform runtime binding on a null reference
2019-05-17T09:16:26.526 [Error,ProcessEntries] Exception while executing function: Functions.ProcessEntries. Microsoft.Azure.WebJobs.Script: One or more errors occurred. Anonymously Hosted DynamicMethods Assembly: Cannot perform runtime binding on a null reference.
2019-05-17T09:16:26.573 [Error,ProcessEntries] Exception while executing function: Functions.ProcessEntries
2019-05-17T09:16:26.573 [Error,ProcessEntries] Cannot perform runtime binding on a null reference
2019-05-17T09:16:26.573 [Error,ProcessEntries] Function completed (Failure, Id=41b4691d-98ec-432f-8e6e-de1e1dcd13b6, Duration=87ms)
2019-05-17T09:16:26.573 [Error,ProcessEntries] Executed 'Functions.ProcessEntries' (Failed, Id=41b4691d-98ec-432f-8e6e-de1e1dcd13b6)
2019-05-17T09:16:26.573 [Error,ProcessEntries] Cannot perform runtime binding on a null reference
2019-05-17T09:16:26.573 [Error,ProcessEntries] Function had errors. See Azure WebJobs SDK dashboard for details. Instance ID is '41b4691d-98ec-432f-8e6e-de1e1dcd13b6'
2019-05-17T09:16:26.573 [Error,ProcessEntries] Cannot perform runtime binding on a null reference
2019-05-17T09:16:26.588 [Error] {"id":"eada812b-1530-4d26-85e3-4c6e6e243f01","requestId":"38609669-59f4-4ded-9685-ef67af3c2909","statusCode":500,"errorCode":0,"message":"An error has occurred. For more information, please check the logs for error ID eada812b-1530-4d26-85e3-4c6e6e243f01"}
2019-05-17T09:16:26.588 [Error] Cannot perform runtime binding on a null reference
2 ответа
В случае, если кто-то сталкивается с этим позже...
Оказывается, проблема заключалась в том, что мое функциональное приложение выполнялось, даже когда был отправлен запрос OPTIONS. Я этого не ожидал. И это было взрывом, потому что с ним не было отправлено полезного груза. Из-за характера проекта я знал, что всегда будет полезная нагрузка с POST, и никогда не думал, что запрос OPTIONS также выполнит этот код. Как только я включил в свою функцию проверку на ноль, все было хорошо, и я начал получать статус = 200 для запросов OPTIONS.
Полагаю, я должен был вспомнить, что нет ничего, что могло бы быть верным.
Может быть, ответ на мой собственный вопрос (который на самом деле не является ответом) позволяет мне опубликовать продолжение более чистым способом.
Я не понимаю, почему запрос опций будет искать что-то связать. Я могу понять, почему моя функция будет, да. У него есть связи с некоторыми учетными записями хранилища, и он ожидает полезную нагрузку. Но почему опционы требуют заботы обо всем этом? Это пытается выполнить функцию?
{
"bindings": [
{
"authLevel": "anonymous",
"name": "req",
"type": "httpTrigger",
"direction": "in",
"methods": [
"post",
"options"
]
},
{
"name": "$return",
"type": "http",
"direction": "out"
},
{
"type": "table",
"name": "outShazamPayloadsTable",
"tableName": "czShazamPayloadsTable",
"connection": "czshazam19storageaccount_STORAGE",
"direction": "out"
},
{
"type": "queue",
"name": "outputQueueItem",
"queueName": "czshazamqueue",
"connection": "czshazam19storageaccount_STORAGE",
"direction": "out"
}
],
"disabled": false
}