Mat*_*att 6 c# odata asp.net-web-api asp.net-web-api2 odata-v4
试图从OData v3迁移到OData v4.为什么我在尝试使用OData函数时会继续获得404?
Web API配置:
ODataModelBuilder builder = new ODataConventionModelBuilder();
//etc
builder.EntitySet<LocalizableString>("LocalizableStringApi");
//etc
var getComparitiveTableFunction = builder.EntityType<LocalizableString>().Collection.Function("GetComparitiveTable");
getComparitiveTableFunction.Parameter<string>("cultureCode");
getComparitiveTableFunction.ReturnsCollection<ComparitiveLocalizableString>();
//etc
config.MapODataServiceRoute("OData_Kore_CMS", "odata/kore/cms", builder.GetEdmModel());
Run Code Online (Sandbox Code Playgroud)
C#代码:
[EnableQuery(AllowedQueryOptions = AllowedQueryOptions.All)]
[HttpGet]
//[ODataRoute("Default.GetComparitiveTable(cultureCode={cultureCode})")] // Tried this, but gets errors and I noticed the function is in the OData model anyway without this, so should be fine.
public virtual IHttpActionResult GetComparitiveTable([FromODataUri] string cultureCode)
{
// Implementation
return Ok(query);
}
Run Code Online (Sandbox Code Playgroud)
从$ metadata返回的XML:
<Schema Namespace="Default">
<Function Name="GetComparitiveTable" IsBound="true">
<Parameter Name="bindingParameter" Type="Collection(Kore.Localization.Domain.LocalizableString)"/>
<Parameter Name="cultureCode" Type="Edm.String" Unicode="false"/>
<ReturnType Type="Collection(Kore.Localization.Models.ComparitiveLocalizableString)"/>
</Function>
...
Run Code Online (Sandbox Code Playgroud)
如您所见,它位于架构/ OData模型中......但以下查询不起作用:
http://localhost:30863/odata/kore/cms/LocalizableStringApi/Default.GetComparitiveTable(cultureCode='en-US')
Run Code Online (Sandbox Code Playgroud)
我也尝试过以下方法:
http://localhost:30863/odata/kore/cms/LocalizableStringApi/GetComparitiveTable(cultureCode='en-US')
http://localhost:30863/odata/kore/cms/Default.GetComparitiveTable(cultureCode='en-US')
http://localhost:30863/odata/kore/cms/GetComparitiveTable(cultureCode='en-US')
Run Code Online (Sandbox Code Playgroud)
所有上述结果都是404.
那么......我在这里做错了什么?
我解决了这个加在我的下面一行web.config中,下<system.webServer>:
<modules runAllManagedModulesForAllRequests="true">
Run Code Online (Sandbox Code Playgroud)
如果我没记错的话,这可能会导致性能问题.所以这不太理想.任何更好的解决方案都非常受欢
| 归档时间: |
|
| 查看次数: |
4215 次 |
| 最近记录: |