我制作的Azure移动服务在本地运行良好。
然后我将Azure移动服务发布到云端,网站显示它当前正在运行。
然后我将GET Request
发布到我发布的网站,它会返回以下内容:
状态500内部服务器错误500内部服务器错误通用 错误消息,在没有更合适的消息时给出
{“message”:“发生错误。” }
我尝试过添加:
<system.web>
<customErrors mode="Off"/>
</system.web>
到Web.Config
目录中的Site\wwwroot
,但这没有做任何事情。
那么如何从我的Azure移动服务中返回更有意义的错误呢?
答案 0 :(得分:6)
结果发现Web API
的返回错误与从Asp.net
或iis
从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指出了我正确的方向