【问题标题】:404 Error when calling for the metadata using WEB API OData v4使用 WEB API OData v4 调用元数据时出现 404 错误
【发布时间】:2015-12-10 16:05:31
【问题描述】:

我已经使用邮递员测试了对 $metadata 的调用,发现当提供 MaxDataServiceVersion 标头时,服务总是返回 404 错误。我有其他关于使用 Breeze 的帖子,但我能找到的最佳答案只是说注释掉添加此标题的行。

我们在客户端应用程序中使用 SAPUI5 ODataModel 并注释掉该标头不是一个选项。

Web API 配置:

 ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
        builder.EntitySet<TBLMATERIAL>("TBLMATERIALs").EntityType.HasKey(o => o.MaterialNumber);

        config.MapODataServiceRoute(
            routeName: "ODataRoute",
            routePrefix: null,
            model: builder.GetEdmModel());

客户代码:

var oModel = sap.ui.model.odata.v2.ODataModel("http://localhost:56720/");

    oModel.attachMetadataFailed(null, function(a,b,c){
        alert(a);
    }, null);

    oModel.attachMetadataLoaded(null, function(){
       debugger;
       var oMetadata = oModel.getServiceMetadata();
       console.log(oMetadata);
    },null);

【问题讨论】:

  • 您是否尝试过在模型上使用 maxDataServiceVersion 选项?
  • “MaxDataServiceVersion”最大值是多少?客户端请求的版本是否与服务器提供的版本同步?伪:IF Client(MaxVersion) > Server(MaxVersion) => HTTP404
  • 嗨。你找到解决办法了吗?

标签: .net odata asp.net-web-api2 sapui5


【解决方案1】:

您不能真正将 OData v4 与 SAPUI5 一起使用。 SAPUI5 提供了一个 v4 数据模型类 (sap.ui.model.odata.v4.ODataModel) 具有误导性,即使在 2019 年末还没有准备好生产。 IE。您不能使用 v4.ODataModel 发送任何自定义标头,这将是身份验证机制的关键。我认识的任何软件公司都使用 v2 模型 (sap.ui.model.odata.v2) 与 SAP 和/或中间件服务进行通信。

您收到的 404 错误是 SAPUI5 向您的 v4 API 发送带有特定 v2 标头的请求的结果。正如其他人在其 cmets 中所述,MaxDataServiceVersion 是这些标头之一。 DataServiceVersion 是另一个。在 OData v4 中,这些标头已替换为具有完全不同名称的标头(OData-VersionOData-MaxVersion)。

我实际上已经走了很长一段路,试图拦截和修改这些头文件,并在 SAPUI5 的 v2 模型和 .NET 的 v4 模型之间建立通信。但最后我失败了,浪费了很多时间。

底线

如果您想与 SAPUI5 通信,请在您的 .Net Framework WebApi 中使用 OData v2!

为此,您必须使用 5.x 版中的 OData Nuget 包 Microsoft.AspNet.WebApi.OData。此软件包支持 OData v1 到 v3。

您可能使用版本号为 7.x 的最新 OData Nuget 包 Microsoft.AspNet.OData。此软件包仅支持 OData v4,不会让您满意。

如果您使用的是 .Net Core,则别无选择,只能使用 OData v4。没有支持 .Net Core 的 OData v2 的 Nuget 包。在这种情况下,您唯一的解决方案是使用 v4 服务器端并使用 SAPUI5 中的普通 JSON 模型 REST API 请求读取/写入它。您将通过该方法使用便利性和功能性,但可以做到。

【讨论】:

    【解决方案2】:

    似乎在 NET Core 或 NET 5 (OData v4) 中 $metadata 端点是这样创建的 https://localhost:5001/odata/$metadata#Ship

    在 Asp.NET (OData v2) 中是这样的 https://localhost:5001/odata/Ship?$metadata

    【讨论】:

      猜你喜欢
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      相关资源
      最近更新 更多