请注意,该问题专门针对Dynamics CRM。我希望能够扩展或取代常见的Web开发的专有功能。因此,这个问题并不重复,尽管一旦看到" CORS"而这又是另一只鸭子询问CORS ......" (打字错误)。
我试图通过CRM调用外部单词,当然,我遇到了CORS问题。现在,我几乎无法控制呼叫所针对的服务器端,因此我想知道是否有可能以某种方式从客户端处理它。
最佳解决方案是,如果服务器开发人员允许来自不同域的呼叫,但是他们不会冒这样做的风险。那么我有什么选择,除了为CORS打开来自CRM的呼叫的自定义服务层和与第三方服务器通话?
唠叨如下(当然,从URL行开始,调用表现得非常好)。
阻止跨源请求:同源策略禁止在https://yaba.daba.doo/list?p1=[]&p2=0&&_=1415714629958读取远程资源。这可以通过将资源移动到同一域或启用CORS来解决。
答案 0 :(得分:2)
这是一个老问题,但我在CRM 2011(和IIS 7.0)上编辑了web.config解决了这个问题。
我已将CORS标头添加到IIS响应中。
添加基本标题
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Headers" value="Origin, X-HTTP-Method, X-Requested-With, Content-Type, Accept" />
<add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS,PUT,DELETE" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>[..]
添加规则
安装Url Rewrite并添加以下规则
<rewrite>
<rules>
[..]
<!-- This rule allow the prefligh request to be authenticated, otherwise raise the 401 error, required ONLY if you use POST, for GET only is not necessary -->
<rule name="CORS Preflight Anonymous Authentication" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{REQUEST_METHOD}" pattern="^OPTIONS$" />
</conditions>
<action type="CustomResponse" statusCode="200" statusReason="Preflight" statusDescription="Preflight" />
</rule>
[..]
</rules>
<outboundRules>
<clear />
<rule name="AddCORSHeaders">
<match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="true">
<!-- This add the Access-Control-Allow-Origin if the pattern match the request url -->
<add input="{HTTP_ORIGIN}" pattern="(http(s)?://((.+\.)?domain1\.lan|(.+\.)?mydomain\.com|(.+\.)?otherdomain\.com))" />
</conditions>
<action type="Rewrite" value="{C:0}" />
</rule>
</outboundRules>
</rewrite>