0

我有一个 OData 服务,它使用 ODataController 使用多个 MVC 控制器实现。除了一个控制器之外,我遇到了所有控制器的问题,在我的 return 语句之后返回了内部 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; 集合返回的实体上的属性,然后将带有上述错误的结果返回给浏览器。我一生都无法获得实际的错误信息(内部错误),奇怪的是一个控制器正在工作,而其余控制器则失败而没有任何细节。

有没有人知道可能导致这种情况的原因,或者如何在返回语句之后打开错误详细信息?

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>

知道如何获得引发的实际异常吗?

4

2 回答 2

0

这是有关如何调试 Web API OData 和 ODL 库的简单指南。

http://odata.github.io/WebApi/10-01-debug-webapi-source/

于 2015-09-09T01:06:23.397 回答
0

很难确切地说出这个问题的原因是什么,但这里有几件事你可以尝试。希望其中之一可以为您提供有关异常的更多信息。

调试所有代码
这似乎很明显,但请确保您不是只调试代码。您可以通过访问 Debug -> Options and Settings... 菜单下的调试选项来检查这一点。确保未选中 Enable Just My Code。通常这可能没问题。当出现异常错误并且您似乎无法找到它们时,有时此设置可能会让您感到困惑

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

打开调试异常后,您可能会得到大量您不想要的异常。忽略它们并继续运行,直到遇到与 oData 相关的异常。

于 2015-09-09T00:18:47.133 回答