Mat*_*att 3 odata asp.net-web-api asp.net-web-api2
我有一个OData v4
不起作用的动作方法; 但请注意它工作正常OData v3
(我显然正在尝试更新我的项目)
OData行动方法:
[HttpPost]
public Translation Translate(ODataActionParameters parameters)
{
// Implementation
}
Run Code Online (Sandbox Code Playgroud)
组态:
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());
Run Code Online (Sandbox Code Playgroud)
客户端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
Run Code Online (Sandbox Code Playgroud)
我试着看看版本4中OData操作的设置是否有任何改变,但看起来是一样的(参考:使用ASP.NET Web API 2.2的OData v4中的动作和功能)
编辑
我发现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/ ..
也没有工作.我已经按照步骤的信......无论我是盲人,在这里失去了一些东西或者有与最新版本的一个严重问题OData
的Web API
.
这可能是由IIS的路由约定引起的,当Uri包含点时,它会有自己的路由规则.但是,在odata v4中,所有函数/动作调用都必须是名称空间限定的.然后在这样的Uri中会出现一个点,这将被IIS错误处理.
要摆脱这种情况,您可以尝试以下任何一种方法:
打开runAllManagedModulesForAllRequests,在Web.config中添加以下内容
<system.webServer>
<modules runAllManagedModulesForAllRequests ="true"/>
</system.webServer>
但是此选项可能存在一些潜在问题,请参阅此帖以获取详细信息.
打开项目特定设置,在Web.config中添加以下内容:
<system.webServer>
<handlers>
<remove name ="ExtensionlessUrlHandler-Integrated-4.0"/>
<add name ="ExtensionlessUrlHandler-Integrated-4.0"path ="odata/cms*"verb ="*"type ="System. Web.Handlers.TransferRequestHandler"preCondition ="integratedMode,runtimeVersionv4.0"/>
</ handlers>
</system.webServer>
归档时间: |
|
查看次数: |
4549 次 |
最近记录: |