请考虑一个引发异常的简单HTTP触发器。当我通过Postman对该触发器进行调用时,它返回500 Internal Server Error,但主体为空。作为开发人员,我想查看stacktrace,以便快速调试正在发生的事情。
// Azure Functions v2
[FunctionName("HttpTrigger2")]
public static async Task<HttpResponseMessage> HttpTrigger2(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequestMessage req)
{
throw new System.Exception("I want to be in the response body.");
}
这是在本地运行。我尚未对此进行远程测试。
我相信Azure Functions v1确实显示了堆栈跟踪。
我知道有多种检查日志的方法,例如通过将环境连接到AppInsights。我正在寻找服务器的即时响应。
答案 0 :(得分:2)
根据设计,v2函数不再像v1那样返回堆栈跟踪。在远程Azure站点上,v1和v2函数均不会返回堆栈跟踪。设计是合理的,堆栈跟踪用于调试,而响应主体显然没有。随着堆栈跟踪作为响应返回,我们似乎公开了冗长的信息,有时甚至是私有信息。
如果在本地调试时为了方便起见要获取异常作为响应,请捕获异常并将其作为响应返回。
与HttpRequestMessage
try
{
throw new System.Exception("I want to be in the response body.");
}
catch (Exception exception)
{
log.LogError(exception, exception.Message);
return req.CreateResponse(HttpStatusCode.InternalServerError, exception);
}
在v2中,我们也可以使用HttpRequest
,响应类型应该为IActionResult
。
try
{
throw new System.Exception("I want to be in the response body.");
}
catch(Exception exception)
{
log.LogError(exception, exception.Message);
var res = new ObjectResult(exception)
{
StatusCode = StatusCodes.Status500InternalServerError
};
return res;
}