【发布时间】:2015-12-08 14:23:20
【问题描述】:
我试图弄清楚我的方法中缺少什么,阻止了我的 WCF 服务被访问。如果我尝试通过来自同一域的 AJAX 请求访问该服务,则没有问题。
我已经采纳了我在网站其他地方看到的建议,将其添加到 web.config 中的 <httpProtocol> 标记以启用 CORS,但它似乎不起作用(请注意前几个customHeaders 中的元素出于不同的安全原因而存在):
<location path="FooBar.svc">
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Request-Method" value="POST"/>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type, X-Requested-With, X-Custom-Header" />
</customHeaders>
</httpProtocol>
</system.webServer>
</location>
尽管这已经到位,但在尝试从单独的页面调用服务时仍然出现错误(使用 IE 开发人员工具):“XMLHttpRequest for ... required Cross Origin Resource Sharing (CORS)”
我的 jQuery ajax 调用 (Post) 也设置了用于 CORS 的值:
crossDomain: true,
xhrFields: { withCredentials: true },
我什至尝试从 https://github.com/jaubourg/ajaxHooks/blob/master/src/xdr.js 添加一个针对潜在 IE XDR 问题的修复程序,但没有任何效果(我使用的是 IE11,所以我不会期待它)
有人知道这里可能出了什么问题吗?
(编辑:服务本身是用这些属性设置的,如果有区别的话:
[OperationContract]
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
ResponseFormat = WebMessageFormat.Json)]
)
(编辑 2:如果有意义,该服务必须是使用表单身份验证的全 HTTPS 站点的一部分 - 并且该服务需要使用与该站点相同的登录凭据。 )
【问题讨论】:
-
您是否尝试过使用类似邮递员的方式调用服务?您能在 http 响应标头中看到 Access-Control-Allow-Origin 吗?
-
不幸的是,我无法在我的工作机器上安装任何东西,所以我必须等待请求它的拜占庭过程完成,然后才能获得任何有用的工具(以及外面还没有服务)。我希望能在这方面有所作为。
-
您提到您正在使用表单身份验证。您是否为此身份验证执行了对服务的初始调用?
-
我没有进行初始身份验证调用。你有一个很好的链接吗?如果这是问题所在,我不会根据身份验证收到不同的错误吗?
-
或者不,显然在这种情况下 ASP.NET FormsAuthentication 返回 302 而不是 401 是一个已知问题......这真的很烦人
标签: jquery asp.net ajax wcf cors