我在VB.Net中使用EF6针对SQL Azure数据库编写了一个带有OData的Web API 2 - 所有这些都运行良好。现在我需要添加另一个控制器,它使用传递ID的存储过程返回一组记录。我正在使用EF 6的Database First选项,因此我在SQL中创建了Stored Proc并导入到我的EF模型中。返回的数据与任何现有实体都不匹配,因此它返回EF更新工具创建的复杂类型。
我使用VS 2013脚手架创建了OData控制器,其中只有一个Get动作接受ID并返回存储过程的记录集。我还将控制器名称添加到ODataConventionModelBuilder以设置路由。当我尝试调用Controller(ID)时,它会返回此错误。
{
"odata.error": {
"code": "",
"message": {
"lang": "en-US",
"value": "No HTTP resource was found that matches the request URI 'http://localhost:54146/odata/UnMappedIOTags1(441)'."
},
"innererror": {
"message": "No routing convention was found to select an action for the OData path with template '~/entityset/key'.",
"type": "",
"stacktrace": ""
}
}
}
我的WebApiConfig.vb包含以下内容:
Dim builder As New ODataConventionModelBuilder
'... 12 other entries removed for brevity
builder.EntitySet(Of IO)("IOs")
builder.EntitySet(Of mapUnMappedTags_Result)("UnMappedIOTags1")
config.Routes.MapODataServiceRoute(
routeName:="odata",
routePrefix:="odata",
model:=builder.GetEdmModel(),
batchHandler:=New DefaultODataBatchHandler(GlobalConfiguration.DefaultServer))
我的控制器看起来像这样。
Public Class UnMappedIOTags1Controller
Inherits ODataController
Private db As New AppasEntities
<ResponseType(GetType(mapUnMappedTags_Result))> <EnableQuery>
Function GetUnMappedIOTags1(<FromODataUri> key As Integer) As IQueryable(Of mapUnMappedTags_Result)
Return db.mapUnMappedTags(key).AsQueryable
End Function
End Class
我让它在不使用OData路由的Web API控制器中工作,但我更喜欢像项目中的其他14个OData控制器一样实现OData控制器。
我错过了什么?