我在(两台服务器)上托管了MVC Web API服务
当我通过C#(如WebClient和HttpClient)使用它时,它工作正常,当我也通过Postman使用它时它可以工作,我通过在浏览器中粘贴服务URL来调用它也可以正常工作但是当我通过jquery有时使用它时它工作,有时不起作用,并得到以下错误
阻止跨源请求:同源策略禁止在myservice.com上读取远程资源(原因:CORS预检频道未成功)。
答案 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);
}
}
}
你可能想要处理不同的预检,但据我所知,这解决了我们的角色问题。