首页 > 解决方案 > 生产中的 Azure Functions 异常

问题描述

有没有办法更好地处理生产部署中返回的异常?

例如,在下面,BadRequestObjectResult 最终显示带有堆栈跟踪的异常。虽然在开发中确实很有帮助,但在生产中,这可能会让攻击者深入了解该功能——我想避免这种情况。

我可以编写自己的包装器 - 但似乎这是应该更好地控制的东西。

我还想以同样的方式处理未处理的异常(就像 ASP-.NET 一样,比如 UseDeveloperExceptionPage)

using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
namespace AzureFunctionExcpetion
{
    public static class Function1 :
    {
        [FunctionName("Function1")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            try
            {
                throw new Exception("exception thrown");
                return new OkObjectResult("Test Response from function 1");
            }
            catch (Exception ex)
            {
                return new BadRequestObjectResult(ex);
            }
        }
    }
}

标签: azure-functions

解决方案


更新 0617:

对于您的原始问题,您可以使用C# preprocessor directives

如下代码:

    public static class Function1
    {
        [FunctionName("Function1")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            try
            {                    
                throw new Exception("exception thrown");
                return new OkObjectResult("Test Response from function 1");
            }
            catch (Exception ex)
            {
#if DEBUG
                return new BadRequestObjectResult(ex);
#else                
                return new BadRequestObjectResult("this is a bad request...");
#endif
            }
        }
    }

然后在调试时,开发者可以看到详细的错误信息;在生产中,最终用户只会看到“这是一个错误的请求......”这样的错误。

对于你的新问题UseDeveloperExceptionPage,我会尝试使用类似的东西,但不确定 azure 函数中是否有类似的东西(我认为在try catch这里使用应该是一个好习惯。)。当有任何发现时,我会及时通知您。


原答案:

请根据此文档启用 Azure 功能的应用程序洞察力。

然后,您可以使用 LogError 方法ILogger将异常写入应用程序洞察力。最终用户看不到错误详细信息。


推荐阅读