Правильная обработка ошибок для функции HTTP? - PullRequest
0 голосов
/ 17 октября 2018

Как правильно обрабатывать ошибки для функций Azure v2, запускаемых по протоколу HTTP?Должны ли - как рекомендуется в этом ответе - все внутренние исключения быть перехваченными и ничего не выдаваться?

Т.е. всегда окружать все, что вы делаете внутри своей функции, try-catch, например так:

[FunctionName("DemoHttpFunction")]
public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequest req, ILogger log)
{
    try
    {
        await InnerDoSomething();
        return new NoContentResult();
    }
    catch(Exception ex)
    {
        log.LogError(ex, "Something went wrong");
        return new StatusCodeResult(500);
    }
}   

Недостатки, которые я вижу, это

  1. . Сообщение об ошибке вообще не возвращается пользователю.StatusCodeResult не предоставляет никакой перегрузки для предоставления сообщения
  2. Все выполнения вашей функции будут показаны как успешные, например, при входе в Application Insights.

1 Ответ

0 голосов
/ 17 октября 2018

Сообщение об ошибке вообще не возвращается пользователю.StatusCodeResult не предоставляет никакой перегрузки для подачи сообщения

Вы управляете кодом.Вы можете легко использовать другой результат, который будет включать желаемую информацию.

//...

catch(Exception ex)
{
    log.LogError(ex, "Something went wrong");
    var model = new { error = "User friendly something went wrong" };
    return new ObjectResult(model) {
        StatusCode = 500
    };
}

//...
...