我有一個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