Ajax:阻止跨源请求:同源策略禁止在

时间:2017-11-08 08:37:10

标签: c# jquery angularjs ajax asp.net-web-api2

我在(两台服务器)上托管了MVC Web API服务

当我通过C#(如WebClient和HttpClient)使用它时,它工作正常,当我也通过Postman使用它时它可以工作,我通过在浏览器中粘贴服务URL来调用它也可以正常工作但是当我通过jquery有时使用它时它工作,有时不起作用,并得到以下错误

阻止跨源请求:同源策略禁止在myservice.com上读取远程资源(原因:CORS预检频道未成功)。

The request details from Postman

1 个答案:

答案 0 :(得分:0)

我们通过这种方式解决了这个问题,我们在WebApiConfig.Register() - Method中注册了PreflightRequestHandler(在Route-configuration之后)

config.MessageHandlers.Add(new PreflightRequestsHandler());

这是Handler的实现:

using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
namespace someNamespace 
{
    public class PreflightRequestsHandler : DelegatingHandler
    {
        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            if (request.Headers.Contains("Origin") && request.Method.Method.Equals("OPTIONS"))
            {
                var response = new HttpResponseMessage { StatusCode = HttpStatusCode.OK };
                var tsc = new TaskCompletionSource<HttpResponseMessage>();
                tsc.SetResult(response);
                return tsc.Task;
            }

            return base.SendAsync(request, cancellationToken);
        }
    }
}

你可能想要处理不同的预检,但据我所知,这解决了我们的角色问题。