return 后 ODataController 出错
ODataController erroring after return
我有一个 OData 服务,它是通过多个使用 ODataController 的 MVC 控制器实现的。除了一个控制器之外,我对所有控制器都有问题,其中 return 内部 500 错误没有任何帮助 after 我的 return 声明:
/// <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 class returns 数据就好了。为每个其他控制器 returned 的所有内容是:
<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) 之后单步执行,我会击中每个人{ 得到; } 属性 在集合的 returned 实体上,之后将带有上述错误的结果 returned 到浏览器。在我的一生中,我无法获得实际的错误信息 (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>
知道如何处理实际引发的异常吗?
很难说出这个问题的确切原因,但您可以尝试以下几种方法。希望其中之一能为您提供有关异常的更多信息。
正在调试所有代码
这看起来很明显,但请确保您不只是调试代码。您可以通过访问 Debug -> Options and Settings... 菜单下的调试选项来检查这一点。确保未选中启用仅我的代码。通常这可能没问题。当出现异常错误并且您似乎无法找到它们时,有时此设置会使您陷入困境
调试异常
另一件既有用又痛苦的事情是 Debug -> Exceptions... 设置。这些异常集可以配置为导致 Visual Studio 自动中断,让您看到它们的活动部分。通常为了调试 MVC 和 .NET,您需要启用公共语言运行时异常。
启用调试异常后,您可能会遇到大量不想要的异常。忽略它们并保持 运行 直到出现与 oData 相关的异常。
这里是关于如何调试 Web API OData 和 ODL 库的简单指南。
我有一个 OData 服务,它是通过多个使用 ODataController 的 MVC 控制器实现的。除了一个控制器之外,我对所有控制器都有问题,其中 return 内部 500 错误没有任何帮助 after 我的 return 声明:
/// <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 class returns 数据就好了。为每个其他控制器 returned 的所有内容是:
<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) 之后单步执行,我会击中每个人{ 得到; } 属性 在集合的 returned 实体上,之后将带有上述错误的结果 returned 到浏览器。在我的一生中,我无法获得实际的错误信息 (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>
知道如何处理实际引发的异常吗?
很难说出这个问题的确切原因,但您可以尝试以下几种方法。希望其中之一能为您提供有关异常的更多信息。
正在调试所有代码
这看起来很明显,但请确保您不只是调试代码。您可以通过访问 Debug -> Options and Settings... 菜单下的调试选项来检查这一点。确保未选中启用仅我的代码。通常这可能没问题。当出现异常错误并且您似乎无法找到它们时,有时此设置会使您陷入困境
调试异常
另一件既有用又痛苦的事情是 Debug -> Exceptions... 设置。这些异常集可以配置为导致 Visual Studio 自动中断,让您看到它们的活动部分。通常为了调试 MVC 和 .NET,您需要启用公共语言运行时异常。
启用调试异常后,您可能会遇到大量不想要的异常。忽略它们并保持 运行 直到出现与 oData 相关的异常。
这里是关于如何调试 Web API OData 和 ODL 库的简单指南。