WebApi,OData和ConventionErrors

时间:2016-02-28 18:41:56

标签: c# asp.net-web-api odata

我正在努力使用OData WebApi配置路由的方式 - 主要是因为无法获得任何合理的调试信息。

有问题的API是服务器服务的一部分(如:windows服务),因此基于OWIN。

我有以下功能:

function = builder.Function("MktSessions").ReturnsCollection<MktSession>();
function.Parameter<string>("Symbol");
function.Parameter<DateTimeOffset>("Begin");
function.Parameter<DateTimeOffset>("End");

并且控制器具有以下签名功能:

[HttpGet]
[ODataRoute("MktSessions(Symbol={symbol},Begin={begin},End={end}")]
public IEnumerable<Reflexo.Api.MktSession> MktSessions (string symbol, DateTime begin, DateTime end) {

这里有些错误。只要ODataRouter attbribute是presend,对$ metadata的任何调用都会重新启动:

  

发生了错误。   该对象尚未初始化。确保这件事   在应用程序中调用HttpConfiguration.EnsureInitialized()   所有其他初始化代码后的启动代码。   System.InvalidOperationException    在   System.Web.OData.Routing.Conventions.AttributeRoutingConvention.get_AttributeMappings()   在   System.Web.OData.Routing.Conventions.AttributeRoutingConvention.SelectController(ODataPath   odataPath,HttpRequestMessage请求)   System.Web.OData.Routing.ODataPathRouteConstraint.SelectControllerName(ODataPath   path,HttpRequestMessage request)at   System.Web.OData.Routing.ODataPathRouteConstraint.Match(HttpRequestMessage   request,IHttpRoute route,String parameterName,IDictionary`2 values,   HttpRouteDirection routeDirection)at   System.Web.Http.Routing.HttpRoute.ProcessConstraint(HttpRequestMessage   请求,对象约束,字符串parameterName,   HttpRouteValueDictionary值,HttpRouteDirection routeDirection)   System.Web.Http.Routing.HttpRoute.ProcessConstraints(HttpRequestMessage   请求,HttpRouteValueDictionary值,HttpRouteDirection   routeDirection)at   System.Web.Http.Routing.HttpRoute.GetRouteData(String virtualPathRoot,   HttpRequestMessage请求)   System.Web.Http.HttpRouteCollection.GetRouteData(HttpRequestMessage   请求)   System.Web.Http.Dispatcher.HttpRoutingDispatcher.SendAsync(HttpRequestMessage   请求,取消语音取消语言)   System.Net.Http.DelegatingHandler.SendAsync(HttpRequestMessage   请求,取消语音取消语言)   System.Web.Http.HttpServer.d__0.MoveNext()   

这与错误消息一样无用。我从来没有机会看到原始异常,这个jsut告诉我配置不存在 - 这与原始错误没有直接相似。

如果我删除它的ODataRoute属性 - 但我显然不能调用该函数。

我是否有任何方式可以忽略实际上从中获取有意义的错误消息?显然ODataRoute出错了(任何人都知道在哪里?)和一个明智的“参数名称blablbla不匹配”文本在某处真的很有帮助。

2 个答案:

答案 0 :(得分:0)

您的粘贴代码有两个问题, 1.在ODataRoute中,你错过了#34;)&#34;在&#34; {end}&#34;之后 2.您应该将MktSessions定义为实体集,因此您的未绑定函数路由不能与实体集相同,您可以将其更改为其他类似RetrieveMktSessions,因为EntitySet查询是由控制器中的get方法启用的,而不是未绑定的函数。

如果您还有其他问题,请告诉我们。

答案 1 :(得分:0)

回答自己。

现在,在侧面问题上,模板末尾缺少“)”。

但更重要的是。

当我将HttpConfiguration.EnsureInitialized()的调用添加到Owin配置的末尾时,我得到了异常抛出的异常。此异常 - 虽然没有内部异常 - 包含在网页输出中丢失的有意义的消息。这样可以更好地进行调试。