在我的项目中,我使用OData 3.0,我需要处理来自SQL存储过程的错误。这是控制器代码:
public class StartProductionBatchListController : ODataController {
private SitContext<StartProductionBatchModel> db = new SitContext<StartProductionBatchModel>();
[EnableQuery]
[SITAuthorize("/production/ordersOverview")]
public DbRawSqlQuery<StartProductionBatchModel> GetStartProductionBatchList([FromODataUri] string entryId)
{
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("ENTRY_ID", entryId);
return db.ExecuteProcedure("StartProductionBatch", parameters);
}
}
如果存储过程发生错误,则使用SQL命令RAISERROR引发异常。
在我的客户端,我收到两个不同的响应 - 如果我从localhost连接,我得到这个:
{
"odata.error":{
"code":"","message":{
"lang":"en-US","value":"An error has occurred."
},"innererror":{
"message":"The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'.","type":"System.InvalidOperationException","stacktrace":"","internalexception":{
"message":"The following materials are not available on the line: 562942",
"type":"System.Data.SqlClient.SqlException","stacktrace":"
... there is the entire stack here
}
}
}
}
...我可以在哪里阅读错误消息(以下材料不在线:562942)
如果我从远程计算机做同样的事情,这就是我得到的:
{
"odata.error":{
"code":"","message":{
"lang":"en-US","value":"An error has occurred."
}
}
}
我尝试设置我的IIS以返回详细错误(在web.config中设置<httpErrors errorMode="Detailed" />
),即使它可能是一个安全危机(在这种情况下不是真的,它是一个未发布到的内部网应用程序互联网),但没有任何帮助。
感谢您的帮助。
答案 0 :(得分:0)
您需要在IncludeErrorDetailPolicy
类上设置HttpConfiguration
属性,如下所示:
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
可在此处找到更多详细信息:https://msdn.microsoft.com/en-us/library/system.web.http.httpconfiguration.includeerrordetailpolicy(v=vs.108).aspx