问题
In my project I use OData 3.0 and I need to handle error that comes from SQL stored procedure. Here is the controller code:
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);
}
}
In case of error in the stored procedure the exception is raised using SQL command RAISERROR.
On my client side I receive two different responses - if I connect from localhost, I get this:
{
"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
}
}
}
}
...where I can read the error message (The following materials are not available on the line: 562942)
If I do the same thing from the remote computer, here is what I get back:
{
"odata.error":{
"code":"","message":{
"lang":"en-US","value":"An error has occurred."
}
}
}
I tried to setup my IIS to return the detailed error (setting <httpErrors errorMode="Detailed" />
in web.config) even though it may be a security risc (not really in this case, it is an intranet application not published to the Internet), but nothing helped.
Thanks for any help.
回答1:
You need to set the IncludeErrorDetailPolicy
property on the HttpConfiguration
class like this:
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
More details can be found here: https://msdn.microsoft.com/en-us/library/system.web.http.httpconfiguration.includeerrordetailpolicy(v=vs.108).aspx
来源:https://stackoverflow.com/questions/36173280/odata-controller-returns-different-error-for-local-and-different-for-remote-mach