【问题标题】:ODataController erroring after return返回后 ODataController 出错
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

    • 这正好暴露了我需要找到问题的根源。可以的,猪。就可以了。
    【解决方案2】:

    很难确切地说出此问题的原因是什么,但您可以尝试以下几种方法。希望其中之一可以为您提供有关您的异常的更多信息。

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-07-10
      • 1970-01-01
      • 2019-12-15
      • 2017-02-19
      • 1970-01-01
      • 2014-12-09
      • 1970-01-01
      • 2018-02-21
      • 2017-03-26
      相关资源
      最近更新 更多