【问题标题】:Odata with no metadata actions not working没有元数据操作的 Odata 不起作用
【发布时间】:2016-04-13 04:14:01
【问题描述】:

我在这里尝试了本文中描述的解决方案: 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 但仍然有动作/功能吗?

【问题讨论】:

  • 您是否错过了 url 中的命名空间或忘记开启 EnableUnqualifiedNameCall?

标签: c# asp.net-web-api odata asp.net-web-api-odata


【解决方案1】:

ODataRoutingConventions.CreateDefault()

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

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

所以,你必须改为调用:

ODataRoutingConventions.CreateDefaultWithAttributeRouting();

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-11
      • 2015-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-09
      相关资源
      最近更新 更多