如何从Azure移动服务返回异常

时间:2016-01-26 09:17:44

标签: c# azure azure-mobile-services

我制作的Azure移动服务在本地运行良好。

然后我将Azure移动服务发布到云端,网站显示它当前正在运行。

然后我将GET Request发布到我发布的网站,它会返回以下内容:

  

状态500内部服务器错误500内部服务器错误通用   错误消息,在没有更合适的消息时给出

     

{“message”:“发生错误。” }

我尝试过添加:

<system.web>
    <customErrors mode="Off"/>
</system.web>

Web.Config目录中的Site\wwwroot,但这没有做任何事情。

那么如何从我的Azure移动服务中返回更有意义的错误呢?

2 个答案:

答案 0 :(得分:6)

结果发现Web API的返回错误与从Asp.netiis

返回错误不同

this link我发现了以下内容:

  

今天Kurt和我正在尝试调试我们拥有的Web API服务   部署到远程机器。该服务返回500错误,   由于种种原因,我们不能只是尝试从中提出要求   部署的盒子。我们希望获得完整的异常详细信息   响应,但我们只看到空白500错误,没有回复。

     

我们首先尝试了自定义错误的Web.Config设置:

<customErrors mode="Off" />
     

但这并没有影响任何事情。我们发现,进一步挖掘   ASP.NET Web API使用不同的配置来获取错误详细信息   被传递。这有几个原因;首先,习惯   Web中的errors元素.Config是一个ASP.NET的东西。这是件事   那个ASP.NET用来判断那个死黄色屏幕是否有   应向用户显示其他详细信息。但是,ASP.NET Web API   旨在自我托管,在ASP.NET和IIS之外。虽然   customErrors元素会影响对ASPX和MVC的请求   Web API没有任何内容。

     

Web API使用了很多,而不是依赖于大量的XML配置   程序化配置。这有助于自我托管,但是   更改错误详细信息等政策,我们必须更改代码,   重新编译和重新部署。要在我们的应用程序中设置错误策略,   我们需要修改我们的全局Web API配置:

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy 
    = IncludeErrorDetailPolicy.Always;
     

使用此模式,来自任何来源的请求将使我们完全例外   详情。它可能不是我们想要的东西,但很好   它可用。

总之,要查看Web API您希望转到Startup班级的错误,您会看到ConfigureMobileApp方法。

这将包括以下行:

HttpConfiguration config = new HttpConfiguration();

并且您想要添加以下内容:

config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

答案 1 :(得分:0)

Azure移动服务处理所有异常并引发带有常规错误消息的HttpResponseException,如果您想获取详细的错误消息,您可以执行以下操作:

// POST tables/TodoItem
public async Task<IHttpActionResult> PostTodoItem(TodoItem item)
{
  try
  {
    TodoItem current = await InsertAsync(item);
    return CreatedAtRoute("Tables", new { id = current.Id }, current);
  }
  catch (HttpResponseException ex)
  {
    string message = ((HttpError)((ObjectContent)ex.Response.Content).Value).First().Value.ToString();
    string[] temp = message.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
    var resp = new HttpResponseMessage(HttpStatusCode.BadRequest)
    {
      Content = new StringContent(message),
      ReasonPhrase = temp[0]
    };
    throw new HttpResponseException(resp);
  }
}

article指出了我正确的方向