【发布时间】:2015-09-09 09:06:23
【问题描述】:
我有一个 OData 服务,该服务是通过使用 ODataController 的多个 MVC 控制器实现的。除了一个控制器之外,我遇到了所有控制器的问题,其中一个内部 500 错误被返回而没有任何帮助在我的返回声明之后:
/// <summary><see cref="ODataController" /> reacting to queries relating to <see cref="Contract" /></summary>
[CustomExceptionFilter]
public class ContractsController : ODataController
{
// GET: odata/Contracts
[EnableQuery]
public IQueryable<Contract> GetContracts()
{
return DataAccess.GetContracts();
}
... other methods
}
/// <summary>Single point of reference to access data</summary>
public static class DataAccess
{
/// <summary>Gets the queryable collection of <see cref="ContractCoverageDetail" /></summary>
/// <returns>The queryable collection of <see cref="ContractCoverageDetail" /></returns>
public static IQueryable<Contract> GetContracts()
{
IQueryable<Contract> results = null;
using (EntityFrameworkContext context = new EntityFrameworkContext())
results = context.Contracts.ToArray().AsQueryable();
return results;
}
}
另一个使用相同 DataAccess 类的控制器可以很好地返回数据。为每个其他控制器返回的所有内容是:
<m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<m:code/>
<m:message xml:lang="en-US">An error has occurred.</m:message>
</m:error>
错误似乎是在我的 return 语句之后 引发的,如果我在 return (F10) 之后单步执行,我会点击每个人 { get;集合的返回实体上的属性,然后将带有上述错误的结果返回给浏览器。我一辈子都无法获得实际的错误信息 (innererror),奇怪的是一个控制器正在工作,而其余控制器却没有任何细节。
是否有人对可能导致此问题的原因有任何想法,或者如何在 return 语句之后打开错误详细信息?
GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
在 global.asax.cs 中没有帮助,web.config 中的以下任何一项也没有帮助:
<system.web>
<customErrors allowNestedErrors="true" mode="On" />
</system.web>
<system.webServer>
<httpErrors existingResponse="PassThrough" />
</system.webServer>
知道如何处理引发的实际异常吗?
【问题讨论】:
标签: asp.net-web-api exception-handling odata odatacontroller