gpt4 book ai didi

c# - WCF 数据服务 (OData) 和 CORS

转载 作者:行者123 更新时间:2023-11-30 12:09:57 24 4
gpt4 key购买 nike

我正在尝试让 WCF 数据服务处理跨域请求。我在如何让 WCF 服务与 CORS 一起工作时找到了这个: http://blogs.microsoft.co.il/blogs/idof/archive/2011/07/02/cross-origin-resource-sharing-cors-and-wcf.aspx

我下载了示例,但无法使其与 DataService 一起使用。它适用于示例服务,但不适用于我的数据服务。

这是我非常简单的 WCF 数据服务:

public class TestService : DataService<DataContext>
{
public static void InitializeService(DataServiceConfiguration config)
{
config.UseVerboseErrors = true;
config.SetEntitySetAccessRule("Items", EntitySetRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
}
}

TestService.svc 文件:

<%@ ServiceHost Language="C#" Factory="WebHttpCors.CorsWebServiceHostFactory, WebHttpCors" Service="MvcApplication1.TestService" %>

DataContext 也很简单:

public class DataContext : DbContext
{
public DbSet<Item> Items { get; set; }
}

但是,预检选项请求仍然返回 501。让 CORS 与数据服务一起工作,我缺少什么吗?

最佳答案

如果您使用的是 IIS,请确认 ExtensionLess 处理程序已配置为处理 OPTIONS 请求。

一些与您的直接问题无关的注意事项:因为 CORS 是 not properly supported ,既不是您找到的包裹,也不是 any other solutions将真正令人满意(您将无法轻松指定您的政策)。可以使用 WCF 检查器创建一个专业维护的包来执行此操作,但我还没有看到。相反,我想邀请你到 vote this up你应该同意吗?

与此同时,我只能建议您非常仔细地集成您在网络上找到的任何代码(因为其中大部分几乎没有经过测试)。 This article可以帮助你。这与数据服务没有直接关系,但它是相同的 WCF 技术。也许看看 Web API 实现或 other projects寻找灵感。

祝你好运。

PS:在 90% 的情况下,您还需要忘记涉及 proxying 的解决方案。 .在大多数架构中,这太可怕了,而且意义不大,除非你的边缘后端以某种方式设计,以某种方式让它看起来不那么笨拙。

更新:还要验证您正在使用的实现是否正确处理了OPTIONS 请求。如果它通过它们,WCF 数据服务将返回 501,并且即使 header 设置正确,拦截器也可能只是将它传回。由于预检请求不需要正文,一个快速而肮脏的 hack 是获取这些 501 并将它们更改为 200,但显然您确实希望首先阻止请求访问数据服务。

关于c# - WCF 数据服务 (OData) 和 CORS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19808069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com