我很苦惱OData WebApi配置路由的方式 - 主要是無法獲得任何明智的調試信息。WebApi,OData和ConventionErrors
有問題的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被預先發送,任何對$元數據的調用都會被終止:
發生錯誤。 該對象尚未初始化。確保 HttpConfiguration.EnsureInitialized()在所有其他初始化代碼之後在應用程序的 啓動代碼中被調用。 System.InvalidOperationException 在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.get_AttributeMappings() 在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.SelectController(ODataPath odataPath,HttpRequestMessage請求)在 系統。 Web.OData.Routing.ODataPathRouteConstraint.SelectControllerName(ODataPath 路徑,HttpRequestMessage請求)在 System.Web.OData.Routing.ODataPathRouteConstraint.Match(HttpRequestMessage 請求,IHttpRoute路線,字符串參數名稱,IDictionary`2值, HttpRouteDirection routeDirection)在 System.Web.Http.Routing.HttpRoute.ProcessConstraint(Ht tpRequestMessage 請求,對象約束,字符串參數名稱, HttpRouteValueDictionary值,HttpRouteDirection routeDirection)處 System.Web.Http System.Web.Http.Routing.HttpRoute.ProcessConstraints(HttpRequestMessage 請求,HttpRouteValueDictionary值,HttpRouteDirection routeDirection)。 Routing.HttpRoute.GetRouteData(字符串virtualPathRoot, HttpRequestMessage請求)在 System.Web.Http.Dispatcher.HttpRoutingDispatcher.SendAsync在 System.Web.Http.HttpRouteCollection.GetRouteData(HttpRequestMessage 請求)(HttpRequestMessage 請求,的CancellationToken的CancellationToken)在 System.Net.Http.D elegatingHandler.SendAsync在 System.Web.Http.HttpServer.d__0.MoveNext((HttpRequestMessage 請求,的CancellationToken的CancellationToken))
這是因爲無用的,因爲它得到一個錯誤消息。我從來沒有機會看到原始異常,這個jsut告訴我配置不存在 - 它沒有直接類似於原始錯誤。
如果我刪除了它的ODataRoute屬性 - 但我顯然不能調用該函數。
有沒有什麼辦法可以讓我忽略從這裏得到一個有意義的錯誤信息?顯然,ODataRoute在某處出錯(任何人都知道在哪裏?),而且某個明智的「參數名稱blablbla不匹配」文本將會非常有幫助。
您已將函數參數聲明爲DateTimeOffset,但方法簽名使用DateTime。不是說這是問題的根源,但你應該改正它。 – lencharest
另外,我無法從問題中的信息中重現問題。 – lencharest