Jaydata ServiceOperation和Action方法POST被忽略

时间:2016-01-29 10:49:03

标签: odata jaydata

我处理Jaydata版本1.3.6(使用OData V3),我遇到服务操作和操作问题,它们都是通过GET方法而不是POST提交的......

我必须将GET更改为POST,因为我的$ filter请求对于GET请求来说是很大的(限制字符串长度)。

我尝试了很多可能性:

$data.EntityContext.extend('Default.Container', {
    'Items': { type: $data.EntitySet, elementType: Entities.Item, method: 'POST' },
    'GetItemsAction': { type: $data.ServiceAction, returnType: $data.Queryable, elementType: 'Entities.Item', 'EntitySet': 'Item', params: [] },
    'GetItemsOperation': { type: $data.ServiceOperation, returnType: $data.Queryable, elementType: 'Entities.Item', 'EntitySet': 'Item', params: [], method: 'POST' }
});

Service Action意味着默认情况下将方法操作设置为POST,但它总是在GET中,即使我手动设置ServiceOperation的方法,方法参数也会被忽略...

我在POST中使用我的方法设置了.Net OData Controller:

[EnableQuery]
public IQueryable<Item> Get(ODataQueryOptions<Item> options)
{
    return this._itemRepository.GetAll();
}

[HttpPost]
[EnableQuery]
public IQueryable<Item> GetItemsAction(ODataQueryOptions<Item> options)
{
    return this._itemRepository.GetAll();
}

[HttpPost]
[EnableQuery]
public IQueryable<Item> GetItemsOperation(ODataQueryOptions<Item> options)
{
    return this._itemRepository.GetAll();
}

Jaydata的实施有问题吗?

感谢您的建议!

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,通过POST方法传递服务操作和服务操作:

当我看到这个时:http://jaydata.org/blog/odata-cookbook-with-jaydata#h3_2

我看到动态上下文创建在第一次解析Edm $元数据时忽略了POST方法...

首先要做的是静态初始化Context,如下所示:

var context = new NortwindContext({
    name: 'oData',
    oDataServiceHost: 'http://localhost:50538/examples/Northwind.svc'
});

context.onReady(function () {
    // work with your data
});

但Jaydata不会发布$ filter和其他$ top查询约定,它总是在GET查询字符串中。

如何使用OData v3解决Jaydata中GET最大长度的问题? 我还不知道......如果有人能帮助我......