|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class CorsHandler : DelegatingHandler { const string Origin = "Origin" ; const string AccessControlRequestMethod = "Access-Control-Request-Method" ; const string AccessControlRequestHeaders = "Access-Control-Request-Headers" ; const string AccessControlAllowOrigin = "Access-Control-Allow-Origin" ; const string AccessControlAllowMethods = "Access-Control-Allow-Methods" ; const string AccessControlAllowHeaders = "Access-Control-Allow-Headers" ; protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { bool isCorsRequest = request.Headers.Contains(Origin); bool isPreflightRequest = request.Method == HttpMethod.Options; if (isCorsRequest) { if (isPreflightRequest) { return Task.Factory.StartNew<HttpResponseMessage>(() => { HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); response.Headers.Add(AccessControlAllowOrigin, request.Headers.GetValues(Origin).First()); string accessControlRequestMethod = request.Headers.GetValues(AccessControlRequestMethod).FirstOrDefault(); if (accessControlRequestMethod != null ) { response.Headers.Add(AccessControlAllowMethods, accessControlRequestMethod); } string requestedHeaders = string.Join( ", " , request.Headers.GetValues(AccessControlRequestHeaders)); if (!string.IsNullOrEmpty(requestedHeaders)) { response.Headers.Add(AccessControlAllowHeaders, requestedHeaders); } return response; }, cancellationToken); } else { return base.SendAsync(request, cancellationToken).ContinueWith<HttpResponseMessage>(t => { HttpResponseMessage resp = t.Result; resp.Headers.Add(AccessControlAllowOrigin, request.Headers.GetValues(Origin).First()); return resp; }); } } else { return base.SendAsync(request, cancellationToken); } } } |
然后在Global中加入:
1 2 3 | protected void Application_Start(object sender, EventArgs e) { GlobalConfiguration.Configuration.MessageHandlers.Add( new CorsHandler()); WebApiConfig.Register(GlobalConfiguration.Configuration); } |
脚本:
1 2 3 4 5 6 7 8 | $.ajax({ // url: "http://localhost:11576/api/Values", url: "http://localhost:39959/api/user/login?name=niqiu&pwd=123456", type: "GET" , //contentType: "application/json;", success: function(result) { alert(result.status); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert( "出错!XMLHttpRequest:" + XMLHttpRequest.status); } }); |
|