没有元数据操作的 Odata 不起作用

Odata with no metadata actions not working

我在这里尝试了本文中描述的解决方案: Original article

正如我所描述的:

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 但仍然 actions/functions 工作的任何建议?

ODataRoutingConventions.CreateDefault()

将创建一个路由约定列表 WITHOUT 属性路由。

而未绑定的操作和函数需要属性路由。

所以,您必须改为调用:

ODataRoutingConventions.CreateDefaultWithAttributeRouting();

如上所述,它通过使用带有属性路由的默认值来工作,但它也需要配置和 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);