3

我在这里尝试了本文中描述的解决方案: 原始文章

如前所述,我做了:

var defaultConventions = ODataRoutingConventions.CreateDefault();
var conventions = defaultConventions.Except(
        defaultConventions.OfType<MetadataRoutingConvention>());
config.MapODataServiceRoute(
        routeName: "ODataRoute",
        routePrefix: null,
        model: model,
        pathHandler: new DefaultODataPathHandler(),
        routingConventions: conventions);

一切正常,没有更多的元数据信息。标准请求工作正常,但未绑定的操作和功能不再工作,我收到 404 响应。

我将操作注册到 Odata 模型构建器,例如:

var validateEmailAction = builder.Action("ValidateEmail");
        validateEmailAction.Parameter<string>("Email");

在控制器中我有:

[HttpPost]
[ODataRoute("ValidateEmail")]
public async Task<IHttpActionResult> ValidateEmail(ODataActionParameters parameters)
{
}

有什么建议我可以如何实现隐藏 Odatametada 但仍然有操作/功能工作?

4

2 回答 2

4

ODataRoutingConventions.CreateDefault()

将创建一个没有属性路由的路由约定列表

同时,未绑定的操作和功能需要属性路由。

因此,您必须更改为调用:

ODataRoutingConventions.CreateDefaultWithAttributeRouting();
于 2016-01-11T06:36:40.247 回答
0

如上所述,它通过使用带有属性路由的默认值来工作,但它还需要配置和 edm 模型属性。

var edmModel = builder.GetEdmModel();
var defaultConventions  =ODataRoutingConventions.CreateDefaultWithAttributeRouting(config,edmModel);
var conventions = defaultConventions.Except(defaultConventions.OfType<MetadataRoutingConvention>());
        var route = config.MapODataServiceRoute(
            "odata",
            null,
           edmModel,
            pathHandler: new DefaultODataPathHandler(),
            routingConventions: conventions);
于 2016-08-03T14:53:36.503 回答