Bar*_*rtG 2 .net c# odata asp.net-web-api
我正在尝试OData在Web Api中启用.我创建了OData路由,以及一个继承的控制器,ODataController我想从我的应用程序中获取一些示例数据.这是我的代码:
public class TicketController : BaseWebApiController //inherits from ODataController
{
[EnableQuery]
public IQueryable<TicketModel> Get()
{
return (_ticketService.GetAll());
}
[EnableQuery]
public SingleResult<TicketModel> Get([FromODataUri] int id)
{
return (_ticketService.Get(id));
}
Run Code Online (Sandbox Code Playgroud)
_ticketService是一个模拟服务,它使用AsQueryable()方法从TicketModel的静态List返回样本数据.它工作正常.
public static class ODataConfig
{
public static void EnableOData(HttpConfiguration config)
{
config.MapODataServiceRoute("odata", "api", GetEdmModel(), new DefaultODataBatchHandler(GlobalConfiguration.DefaultServer));
config.EnsureInitialized();
}
private static IEdmModel GetEdmModel()
{
var builder = new ODataConventionModelBuilder();
builder.EntitySet<TicketModel>("Ticket");
var edmModel = builder.GetEdmModel();
return edmModel;
}
}
Run Code Online (Sandbox Code Playgroud)
ODataConfig.EnableOData(config)然后在App_Start/WebApiConfig.csRegister方法中调用.
问题是,虽然url 正确http://localhost:52074/api/Ticket调用Get()方法,但是http://localhost:52074/api/Ticket(1)也调用url请求Get()而不是Get(1).我试图追加ODataRouting("({id})")属性但它所做的就是抛出一个带有消息的异常
"控制器中操作的路径模板不是有效的OData路径模板".
以前有人有这个问题吗?有任何想法吗?帮助赞赏.
PS.这是我在这里的第一个问题,所以如果遗漏了什么,请告诉我.
您应该重命名id为key,然后http://localhost:52074/api/Ticket(1)将路由到Get(1).
如果要使用ODataRoute,则属性应为:[ODataRoute("Customers({id})")].
FYI
odata.org
odata.github.io/WebApi/
| 归档时间: |
|
| 查看次数: |
9044 次 |
| 最近记录: |