Asp.Net Wep Api-返回内部服务器错误以及异常详细信息

时间:2018-07-09 08:09:41

标签: exception asp.net-web-api

是否可以通过异常详细信息返回内部服务器错误?

例如,如果我有以下内容:

 [HttpPost]
 public IHttpActionResult test(MyDto dto)
 {
      using (var transaction = _unitOfWork.BeginTransaction())
      {
            try
            {
                //do some stuff

                transaction.Commit();
                return Ok();

            }
            catch (Exception ex)
            {
                transaction.Rollback();

                return InternalServerError(new Exception(ex.Message));
            }
       }
 }

请给我以下内容。但是如您所见,没有内部异常详细信息可提供任何有意义的信息。

{
  "message": "An error has occurred.",
  "exceptionMessage": "An error occurred while updating the entries. See the 
                       inner exception for details.",
   "exceptionType": "System.Exception",
  "stackTrace": null
}

基本上,我想了解有关异常发生的更多信息,以便我进行故障排除?

1 个答案:

答案 0 :(得分:1)

公开异常详细信息的最简单方法是在HttpConfiguration或中设置配置属性IncludeErrorDetailPolicy = Always。 Web.conf。

https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/configuring-aspnet-web-api

在那之后,您可以抛出执行,asp.net会创建InternalServerError-Response。

另一种方法是创建自己的错误对象,并使用信息重新调整它。

但是出于安全原因,您应谨慎提供有关内部服务器信息的大量信息。

public static void Register(HttpConfiguration config)
{  
  Logger.Info("WebApiConfig: Register: Start");
  config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
  // ...
}



 [HttpPost]
 public IHttpActionResult test(MyDto dto)
 {
      using (var transaction = _unitOfWork.BeginTransaction())
      {
            try
            {
                //do some stuff

                transaction.Commit();
                return Ok();

            }
            catch (Exception)
            {
                transaction.Rollback();
                throw;
            }
       }
 }