CORS联系自托管WebApi服务时出现飞行前错误

时间:2017-08-09 14:39:16

标签: asp.net asp.net-mvc cors preflight

当Web门户联系位于Web门户服务器以外的其他服务器中的自托管WebAPI服务时,出现此错误:

  

对预检请求的响应未通过访问控制检查:否   '访问控制允许来源'标题出现在请求的上   资源。起源' someportaldomain'因此不是   允许访问。

自托管服务始终返回" Access-Control-Allow-Origin"每个响应中都有标题,但如果浏览器在调用url之前决定进行预迁移,则用户会在js控制台上收到此错误。

1 个答案:

答案 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;
    }