【问题标题】:BreezeJS with .NET System.Services.Data.DataService OData Server: HTTP OPTIONS not supported for $metadata带有 .NET System.Services.Data.DataService OData 服务器的 BreezeJS:$metadata 不支持 HTTP 选项
【发布时间】:2016-09-05 14:49:35
【问题描述】:

我正在尝试将 BreezeJS 与现有的 OData 服务器一起使用,该服务器是使用 .NET System.Services.Data.DataService 4.0 版实现的。看起来,BreezeJS 正在执行 http OPTIONS 请求以获取 $metadata,但服务器抛出 NotImplemented 异常。 当我在浏览器中使用 http GET 手动请求 $metadata 时,我得到了(XML 格式的)元数据。

有没有办法将 Breeze 配置为使用 http GET 或者我需要以某种方式调整服务器以支持 http OPTIONS?

任何帮助将不胜感激。

【问题讨论】:

    标签: odata breeze wcf-data-services


    【解决方案1】:

    OPTIONS 请求是CORS 的一部分,如this answer 中所述。您需要将服务器配置为支持CORS,或者不要使用来自浏览器的跨域请求。

    请参阅this answerthis answer,了解如何将 WCF 与 CORS 结合使用。看来建议是切换到 Web API。

    【讨论】:

    • 这似乎是正确的,但让我感到困惑。 Breeze 声称支持具有不同适配器的 OData V1/V2(“odata”)、V3(“webApiOData”)以及 V4(“webApiOdata4”,初步,但文档可能已过时)。这些链接似乎表明 Breeze 不适用于 V1/V2 (WCF DataServices),因为缺少 CORS 支持,这只能通过迁移到 Web API 来实现。不过,这可能是服务器端 datajs 和/或 Odata 的限制。
    • 服务器端需要支持 CORS。您的应用程序需要 CORS 支持吗?
    • 直到这件事出现之前,我什至不知道 CORS。服务器是现有软件,作为 Windows 服务运行并在给定端口上提供 odata。 angular/breeze 客户端目前正在使用 lite-server 开发和测试驱动,显然在不同的端口上,但在同一台机器上。任何提示更改设置是否会以某种方式解决问题?
    • 显然,简单的解决方案是在同一个端口上运行所有内容。如果你不能这样做,也许你可以在你的 web 服务器上有一个传递服务,它基本上将请求代理到 odata 服务。对浏览器来说,看起来所有请求都发往同一个地方。
    猜你喜欢
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-19
    • 2018-05-25
    • 2021-10-23
    相关资源
    最近更新 更多