我有一个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语句后出现错误,如果我在返回(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>
知道我怎么能得到实际引发的异常吗?
答案 0 :(得分:0)
很难确切地说明这个问题的原因是什么,但这里有一些你可以尝试的事情。希望其中一个能为您提供有关例外情况的更多信息。
调试所有代码
看起来很明显但请确保您不是只调试代码。您可以通过访问Debug - &gt;下的调试选项来检查这一点。选项和设置...菜单。确保未选中“启用我的代码”。这通常很好。如果出现异常错误并且您似乎无法访问它们,有时此设置可能会让您感到困扰
调试例外
另一件既有用又痛苦的事情是Debug - &gt;例外......设置。这些是可以配置为使Visual Studio自动中断的异常集,允许您查看其移动部件。一般来说,为了调试MVC和.NET,你需要启用公共语言运行时例外。
启用调试例外后,您可能会遇到大量您不想要的异常。只需忽略它们并继续运行,直到遇到与oData相关的异常。