我正在努力使用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不匹配”文本在某处真的很有帮助。
答案 0 :(得分:0)
您的粘贴代码有两个问题, 1.在ODataRoute中,你错过了#34;)&#34;在&#34; {end}&#34;之后 2.您应该将MktSessions定义为实体集,因此您的未绑定函数路由不能与实体集相同,您可以将其更改为其他类似RetrieveMktSessions,因为EntitySet查询是由控制器中的get方法启用的,而不是未绑定的函数。
如果您还有其他问题,请告诉我们。
答案 1 :(得分:0)
回答自己。
现在,在侧面问题上,模板末尾缺少“)”。
但更重要的是。
当我将HttpConfiguration.EnsureInitialized()的调用添加到Owin配置的末尾时,我得到了异常抛出的异常。此异常 - 虽然没有内部异常 - 包含在网页输出中丢失的有意义的消息。这样可以更好地进行调试。