我有一个OData v4
操作方法,它不工作;但是请注意,这是在OData v3
工作正常(我显然在试图更新我的项目的过程)Web API 2:OData 4:操作返回404
OData的操作方法:
[HttpPost]
public Translation Translate(ODataActionParameters parameters)
{
// Implementation
}
配置:
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Page>("Pages");
//etc (Other Entity Sets)
var pageEntityType = builder.EntityType<Page>();
var translateAction = pageEntityType.Collection.Action("Translate");
translateAction.Parameter<Guid>("pageId");
translateAction.Parameter<string>("cultureCode");
translateAction.Returns<Translation>();
//etc (Other Actions)
var route = config.MapODataServiceRoute("OData_CMS", "odata/cms", builder.GetEdmModel());
客户端AJAX呼叫:
var data = {
pageId: $("#CultureSelector_PageId").val(),
cultureCode: $("#CultureSelector_CultureCode").val()
};
$.ajax({
url: "/odata/cms/Pages/Translate",
type: "POST",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(data),
dataType: "json",
async: false
})
.done(function (json) {
//etc
我想看看是否有什么改变了有关设置在4版本的OData行动,但它似乎是相同的(参见:Actions and Functions in OData v4 Using ASP.NET Web API 2.2)
编辑
我发现OData v4
用途一个Default
命名空间并实现了,具体如下:
首先,仅仅通过改变我的AJAX调用:
url: "/odata/cms/Pages/Default.Translate",
这并没有工作,所以我也补充道:
[ODataRoute("Default.Translate")]
和
[EnableQuery(AllowedQueryOptions = AllowedQueryOptions.All)]
我的行动,按照这个链接的说明:http://damienbod.wordpress.com/2014/06/16/web-api-and-odata-v4-crud-and-actions-part-3/ ..
也无法正常工作..我遵循了这封信的步骤......要么我在这里失明并且错过了某些东西,要么在的最新版本中存在严重问题为Web API
。
检查此[post](http://stackoverflow.com/questions/32063196/odata-v4-function-always-returns-404/39438274#39438274)的解决方案。 – rdhainaut 2016-09-12 15:25:41
如果你想要一个完整的解决方案, 检查此[答案](http://stackoverflow.com/questions/32063196/odata-v4-function-always-returns-404/39438274#39438274);)EtVoilà – rdhainaut 2016-09-12 15:27:33