返回

时间:2015-09-08 23:22:51

标签: asp.net-web-api exception-handling odata odatacontroller

我有一个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>

知道我怎么能得到实际引发的异常吗?

1 个答案:

答案 0 :(得分:0)

很难确切地说明这个问题的原因是什么,但这里有一些你可以尝试的事情。希望其中一个能为您提供有关例外情况的更多信息。

调试所有代码
看起来很明显但请确保您不是只调试代码。您可以通过访问Debug - &gt;下的调试选项来检查这一点。选项和设置...菜单。确保未选中“启用我的代码”。这通常很好。如果出现异常错误并且您似乎无法访问它们,有时此设置可能会让您感到困扰

调试例外
另一件既有用又痛苦的事情是Debug - &gt;例外......设置。这些是可以配置为使Visual Studio自动中断的异常集,允许您查看其移动部件。一般来说,为了调试MVC和.NET,你需要启用公共语言运行时例外。

启用调试例外后,您可能会遇到大量您不想要的异常。只需忽略它们并继续运行,直到遇到与oData相关的异常。