当Web门户联系位于Web门户服务器以外的其他服务器中的自托管WebAPI服务时,出现此错误:
对预检请求的响应未通过访问控制检查:否 '访问控制允许来源'标题出现在请求的上 资源。起源' someportaldomain'因此不是 允许访问。
自托管服务始终返回" Access-Control-Allow-Origin"每个响应中都有标题,但如果浏览器在调用url之前决定进行预迁移,则用户会在js控制台上收到此错误。
答案 0 :(得分:1)
我在这里发布答案,因为我没有找到任何直接的,不得不从几个帖子中删除它。
解决方案是将Options方法添加到自托管服务,如下所示:
[ServiceContract]
public interface IACT_HttpService
{
//[FaultContract(typeof(ValidationFault))]
[WebInvoke(Method = "OPTIONS", UriTemplate = "*")]
void GetOptions();
//My other methods
...
}
public class ACT_HttpService : IACT_HttpService
{
//Adjust this method to restrict the origin as needed
public void GetOptions()
{
log.Debug("Get options fired");
//These headers are handling the "pre-flight" OPTIONS call sent by the browser
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Methods", "POST,GET,PUT,DELETE,OPTIONS");
//Add here any special header you have
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Headers", "X-Requested-With,Content-Type");
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-A}llow-Origin", "*");
WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
}