在WebApi中实现Cors访问
Cors是个比较热的技术,这在蒋金楠的博客里也有体现,Cors简单来说就是“跨域资源访问”的意思,这种访问我们指的是Ajax实现的异步访问,形象点说就是,一个A网站公开一些接口方法,对于B网站和C网站可以通过发Xmlhttprequest请求来调用A网站的方法,对于xmlhttprequest封装比较好的插件如jquery的$.ajax,它可以让开发者很容易的编写AJAX异步请求,无论是Get,Post,Put,Delete请求都可以发送。
Cors并不是什么新的技术,它只是对HTTP请求头进行了一个加工,还有我们的Cors架构里,对jsonp也有封装,让开发者在使用jsonp访问里,编写的代码量更少,更直观,呵呵。(Jsonp和Json没什么关系,它是从一个URI返回一个Script响应块,所以,JSONP本身是和域名没关系的,而传统上的JSON是走xmlhttprequest的,它在默认情况下,是不能跨域访问的)
做在后
一 下面先说一下,对jsonp的封装
1 注册jsonp类型,在global.asax里Application_Start方法中
GlobalConfiguration.Configuration.Formatters.Insert(0, new EntityFrameworks.Web.Core.JsonpMediaTypeFormatter());
2 编写JsonpMediaTypeFormatter这个类型中实现了对jsonp请求的响应,并在响应流中添加指定信息,如callback方法名。
/// <summary>
/// 对jsonp响应流的封装
/// </summary>
public class JsonpMediaTypeFormatter : JsonMediaTypeFormatter
{
public string Callback { get; private set; }
public JsonpMediaTypeFormatter(string callback = null)
{
this.Callback = callback;
}
public override Task WriteToStreamAsync(
Type type,
object value,
Stream writeStream,
HttpContent content,
TransportContext transportContext)
{
if (string.IsNullOrEmpty(this.Callback))
{
return base.WriteToStreamAsync(type, value, writeStream, content, transportContext);
}
try
{
this.WriteToStream(type, value, writeStream, content);
return Task.FromResult<AsyncVoid>(new AsyncVoid());
}
catch (Exception exception)
{
TaskCompletionSource<AsyncVoid> source = new TaskCompletionSource<AsyncVoid>();
source.SetException(exception);
return source.Task;
}
}
private void WriteToStream(
Type type,
object value,
Stream writeStream,
HttpContent content)
{
JsonSerializer serializer = JsonSerializer.Create(this.SerializerSettings);
using (StreamWriter streamWriter = new StreamWriter(writeStream, this.SupportedEncodings.First()))
using (JsonTextWriter jsonTextWriter = new JsonTextWriter(streamWriter) { CloseOutput = false })
{
jsonTextWriter.WriteRaw(this.Callback + "(");
serializer.Serialize(jsonTextWriter, value);
jsonTextWriter.WriteRaw(")");
}
}
public override MediaTypeFormatter GetPerRequestFormatterInstance(
Type type,
HttpRequestMessage request,
MediaTypeHeaderValue mediaType)
{
if (request.Method != HttpMethod.Get)
{
return this;
}
string callback;
if (request.GetQueryNameValuePairs().ToDictionary(pair => pair.Key,
pair => pair.Value).TryGetValue("callback", out callback))
{
return new JsonpMediaTypeFormatter(callback);
}
return this;
}
[StructLayout(LayoutKind.Sequential, Size = 1)]
private struct AsyncVoid
{
} }
二 对指定域名实现友好的跨域资源访问
1 在global.asax中注册这个HttpHandler,使它对HTTP的处理进行二次加工,它可以有同步和异步两个版本,本例中实现异步方式实现
//对指定URI的网站进行跨域资源的共享
GlobalConfiguration.Configuration.MessageHandlers.Add(new EntityFrameworks.Web.Core.Handlers.CorsMessageHandler());
下面是MessageHandlers原代码,实现对HTTP请求的二次处理
/// <summary>
/// 跨域资源访问的HTTP处理程序
/// </summary>
public class CorsMessageHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
//得到描述目标Action的HttpActionDescriptor
HttpMethod originalMethod = request.Method;
bool isPreflightRequest = request.IsPreflightRequest();
if (isPreflightRequest)
{
string method = request.Headers.GetValues("Access-Control-Request-Method").First();
request.Method = new HttpMethod(method);
} HttpConfiguration configuration = request.GetConfiguration();
HttpControllerDescriptor controllerDescriptor = configuration.Services.GetHttpControllerSelector().SelectController(request);
HttpControllerContext controllerContext = new HttpControllerContext(request.GetConfiguration(), request.GetRouteData(), request)
{
ControllerDescriptor = controllerDescriptor
};
HttpActionDescriptor actionDescriptor = configuration.Services.GetActionSelector().SelectAction(controllerContext);
//根据HttpActionDescriptor得到应用的CorsAttribute特性
CorsAttribute corsAttribute = actionDescriptor.GetCustomAttributes<CorsAttribute>().FirstOrDefault() ??
controllerDescriptor.GetCustomAttributes<CorsAttribute>().FirstOrDefault();
if (null == corsAttribute)
{
return base.SendAsync(request, cancellationToken);
}
//利用CorsAttribute实施授权并生成响应报头
IDictionary<string, string> headers;
request.Method = originalMethod;
bool authorized = corsAttribute.TryEvaluate(request, out headers);
HttpResponseMessage response;
if (isPreflightRequest)
{
if (authorized)
{
response = new HttpResponseMessage(HttpStatusCode.OK);
}
else
{
response = request.CreateErrorResponse(HttpStatusCode.BadRequest, corsAttribute.ErrorMessage);
}
}
else
{
response = base.SendAsync(request, cancellationToken).Result;
} //添加响应报头
if (headers != null && headers.Any())
foreach (var item in headers)
response.Headers.Add(item.Key, item.Value); return Task.FromResult<HttpResponseMessage>(response);
}
}
2 添加Cors特性,以便处理可以跨域访问的域名,如B网站和C网站
/// <summary>
/// Cors特性
/// </summary>
[AttributeUsage(AttributeTargets.Class, Inherited = true, AllowMultiple = false)]
public class CorsAttribute : Attribute
{
public Uri[] AllowOrigins { get; private set; }
public string ErrorMessage { get; private set; }
public CorsAttribute(params string[] allowOrigins)
{
this.AllowOrigins = (allowOrigins ?? new string[0]).Select(origin => new Uri(origin)).ToArray();
}
public bool TryEvaluate(HttpRequestMessage request, out IDictionary<string, string> headers)
{
headers = null;
string origin = null;
try
{
origin = request.Headers.GetValues("Origin").FirstOrDefault();
}
catch (Exception)
{
this.ErrorMessage = "Cross-origin request denied";
return false;
}
Uri originUri = new Uri(origin);
if (this.AllowOrigins.Contains(originUri))
{
headers = this.GenerateResponseHeaders(request);
return true;
} this.ErrorMessage = "Cross-origin request denied";
return false;
} private IDictionary<string, string> GenerateResponseHeaders(HttpRequestMessage request)
{ //设置响应头"Access-Control-Allow-Methods" string origin = request.Headers.GetValues("Origin").First(); Dictionary<string, string> headers = new Dictionary<string, string>(); headers.Add("Access-Control-Allow-Origin", origin); if (request.IsPreflightRequest())
{
//设置响应头"Access-Control-Request-Headers"
//和"Access-Control-Allow-Headers"
headers.Add("Access-Control-Allow-Methods", "*"); string requestHeaders = request.Headers.GetValues("Access-Control-Request-Headers").FirstOrDefault(); if (!string.IsNullOrEmpty(requestHeaders))
{
headers.Add("Access-Control-Allow-Headers", requestHeaders);
}
}
return headers;
}
} /// <summary>
/// HttpRequestMessage扩展方法
/// </summary>
public static class HttpRequestMessageExtensions
{
public static bool IsPreflightRequest(this HttpRequestMessage request)
{
return request.Method == HttpMethod.Options
&& request.Headers.GetValues("Origin").Any()
&& request.Headers.GetValues("Access-Control-Request-Method").Any();
}
}
3 下面是为指定的API类型添加指定域名访问的特性
[CorsAttribute("http://localhost:11879/", "http://localhost:5008/")]/*需要加在类上*/
public class ValuesController : ApiController
{
//代码省略
}
下面看一下實例的結果:
aaarticlea/png;base64,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" alt="" />
上图中分别使用了jsonp和json两种方法,看一下它们的响应结果
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAApsAAABRCAIAAAASHPrIAAAVkUlEQVR4nO2dy5LbRpaGz9uognuyAk/h0gLPYBY33LVb3vAdXFTtEFLZO65tlUpLRnS72w67JRUjGCEFN7WYkWdqdLE0F10xiwSQl3MSSIDgtf5vIbESiZN5DhL5ZyYJJP0bAAAAAHYf+nfQiBcvXlxdXT179my+Gp4/f351dfXixYtNOwoAAGA3oBegPn/88cfz58+vr68/fvyYroaPHz9eX18/e/Zs074CAADYDegPUJ+rq6vr6+sVabnJ9fX11dXVpt0FAACwA0DRm/Ds2bPVzc5NPn78+Pz58027CwAAYAeg/wD1mc/na5BzxXw+37S7AAAAdgD6T1CfNSv6pt0FAACwA9A1qM+aFX3T7gIAANgB6L9Afdas6Jt2FwAAwA6wSkX/8Wsi6n73m+9gfujHr4mIvv5x2fJ++67rsfPj19mB4kO9810CFX2RREQUJYuyw8Pprir6b9917curAshjqC6wryWsnL/95RYR3frL3zZTPAAArAl6uRp+6hMRUf+nl7+fdLNP5rH+yUm3f3LSVZ+Iuie/Ny2qKEB94JZ+P+nq8n/qqyw/9Y06ZSa6Jyeq2kSioYJARZ8OuWBbadNhJvjToVf65/O5pxb3vtKVvfXN31manPrVvZcvX758+fdvbuk/731lZK4X937fCtlJP4tcFlIfRnMIw3YscyIM5artnpQGAAC7Db1qn385nXn/wYO+6u//ZWXqdrtE3X6/S9R/8OrVqwd9yj41KtKwVFadbrdr1MzIYlSvqiYeRVeTbiKKhsOIiZgS7OlQlrgoimRJn8/npa7/nGnTz69e3TsiIjq6Z2cwU/XnnzNFp6N7WfKtb34OjreKUf+BihQRdU8enHSVoFuXmce2CaraNStYYEQIAAD2GHq9Kh6Pe0T9c+tP6o0fn/epjN74ce1SsrOcEjNUef1zXq5bOe9hRomiR8k0iYZJEpmz8+mQ8pl5MS1P0+kwz2MkSopeGoF//PWAiA7++g/jk3jY/lN9ODo6oqP7r+8f8RPLOe9Tb/z48bhnXrDH416v1zND57nY9S6y6FeRrnActBKN8+8f5QfUp6P7r18XqZYhKQ0AALaathXd0EbVuRvdeL/fo/65ytMf571/r9/v9c9fn/drq3nOeZ+KsYJrIhMZKdlIejzuWaee91tQ9CjK5+nDoa3oREQUJYt8Bb70C/VwRbdUKNchU7leG39nin7//pH6p55uPR6Ps9X2/rl9yXvjcV+H8ryv45gPrYILcavsTdUfxcQiQlzFj+6ro5nveRx8YwgAANhm6M0KOD8m6o3PlUw+efPmybhHRMfnb95kn9XB3vjJk3Hv+Pz8OMuscixZ7JPsE9Hx+ZNxryhKpZno4p5Ic/SS2gQrepRMkyhKEneOPk0iouHU+kPU8zSdz+elXhfqo/48s1T96Ez9fXSWZ8//zhT97M3ZER0dHZkmwnhSXEHqjcf5Fc+GccZlL+J4flweVC+uCzwx/0NMzCN0IMQpj4OFnVgzLAAAsDHoz3Z5erdHRMfHSj6P795VUnn88GGW8tDJc/ww+1sdq8dDptK5Gj98eJwbfHq3R727T/NSzEyWpd7dpw+Piah392lVuVXfo9tzdFPRF5l6q/+TJFLfuXt/D5+m8/m8tC7/vHNARAd3/iknn9mHi9zqw+2zP/88u51Jl2siMPJ53JywPjw2rr90hYLLEj1Utb59Zv0hJmbnZ5Ke28mPesKnw2JYBACArYbetsvFgAYXFwMaXLy9GKgO//TiVM3bTi+zTJenvSzD4CL/m7LPTVE2soX8oqT8SO/08u3FQB+5GBjlXQxocKqqcHraU/9KhjRlih4lC/VJ/B6d//xdTey9gp7O5/Myv39RcnX7eyf9+9t5sv5kflbn3f6+SKSDO7/UjvrbtxcD6vV6NBgMsgtdXNLe6WV+pYuYN7zIqoZ2BQ23RF9dVw/u/JLF6uDOL8bhzHsWQIURJgAA2HLoXetcnh4eHh4SER2ePjo9JPXp0s70aEBEh4eHWR51wuBR8yKLsy+zIgtrl6eHdHh6+e7RQNfj0aA4niWbRy9PDwePlB25SpVPr/kU3UkvcuqxgKToUhV+MKaQB9/+6ibpVPfI7R/evXv37t2v3x4Uf6jDRv6wgGvy8LILfXl6WITw0WCZS2w7d/uHwgXHWSFRJR18+6s+evsHZU/5b55DdPDtr1ZCnbgAAMAGaV/RVc9u9/YGWgsGj/Ksh6eXxQGm/YFl2eddnh4WSZmiOyLESnLqXSo9NRRdr8RPsy/RI/5gW/68m/RlukfRtwIrZnr8RtbwSst9zasLAACgDvTfoD5rfgvspt0FAACwA9D/gPqsWdE37S4AAIAdgP4X1GfNir5pdwEAAOwA9H+gPmtW9E27CwAAYAeAojcBig4AAGDboPfv379//34OarJORQcAAAAqoQ8fPnz48GG+RokCAAAAQOtA0QEAAIB9gD59+vTp0ycoOgAAALDTQNEBAACAfYA+f/78+fNnKDoAAACw09CXL1++fPkCRQcAAAB2GlL/QdEBAACAnQaKDgAAAOwDUHQAAABgH4CiAwAAAPsAFB0AsBSLJBpON10JAEAdRZ+NOkTxZNUVAmA9zEadzmim/yAiIp1SJOZJk5g6o9ls1Am4C7TtOmeV0ZadZpbdPIskIkWULNJFkmSCPh2WS/siiaJk0bxcjnUVV047dd6+srK2zu+HILP8GrR/VXaxtWyEhnP0/IKvQOPtbjSdxGSQlebkEepjnlZUsciVp7h2hLOKc4yO3c2jkwpTrIZFonvXlHkh2rG9EOITVsPKyBsnFdUpkhxH5SvGOwhvVJll6bq7Z0l5WOmCF1myGYrZqMNa8iS2TnH7C321xCtdR9HF1sIqY9mZxMUJUt1rsExfqbQ8U/RFEg2ni8UiPxQRI0oWi+l00bhcM+bK+7b66LB4NoyV/07nvYp5r9UvS+z3muLcAFaQTKDoW0SIokudpG78FE+sSE1it5WaRybG2M8MfWZA/ef0tqmVRchj3/G5qjlXlV1ooSx+Vu6N1ZXaebjvshezUaczGsU6cpVeCHZKmmtRj4Aa+s4WIy8Zzu2w+Ahl8TqzI4JlqXifPadtiHbcKTk7Kii6lSerox1dx5ChOPpe4WdNYnvQ5m3z/tIncafTKeKRh97qzGejThzHRBSPjKGke1cG1FDKMx0qM8NM0c3ZdxhiuRV5rOtLeY8Rx/aE0h0Zz0YdFQIShpBFWFg8hRF2k1iJ/YyvJdsO1o4Pyy21AbedeGfkrrFJHE/Mm4K3dpbi9vlC5I0UYeqwTOT5+EZoLSwaUmuxRu/O1KGOnTVQZ46ue3EmgqKq8d7fHVhPDH2zrwwPgThjStPUvAsmcR49SdXEG6NC0XnxkuoTUTxxb0/bi6K1uSpR5gWzUz598NzV3hqKRvyK7kwF2PDdaOlmWWVTyOysMsvCNZHmDuY9LHpqai+vUoCii3jGCRVzAR4+OfIlZF1lFj1RFmajDhVaUtyn3pFTVQ0t9EJ7qqbjmZwvkmGJrk+nS37dzgVvVnwZyEd1xsiY53HiwOPJ7XioilWeSYh32eC7EYKiu23AV5jYbdgdmtWD8dYutH/W58u6UDGUKPE2KKOqeSq1BB6NshZVogIBdtZCQ0XX3vgU3Rwe6dVg3je7N1hm040AC4qrhZNsCMqL15cgZoNDrujO6JUXL+bJE31eFLdBhaI7Xgh2ZC+s+ATXkONEPjvJWkZQVmL7WrK+ISDy1lk+y8LNIM2vhUqz8b5VQcGo409YX+GME/jwLJQmij5TXVVRd+PC59PX0azISfFEuisb4S6pD6dZSpRM81V1Yd19OEzqzeNdzLmSMGs3vE6NgyG9E4un58o2Rbq+llneShsWY7kltAHWTvSppcKay6K1EGn6IbV/afDNWqAzhRFTlopJUQVpDc+Nhjg7dRXdV+dSO2thZXN0wQlpXDOJO6PZbBT71Np7qq2F0g2epmaCMZxzbyQh2u7US+r8+NTVHjJqy9aajXUfhXjhKLrPiwY15HhnEp7xLI8PL8tT54qoevwSzjLzlHlqeFGp6LwmHjas6M7U0m4+oqK32rUUX6AnU3vWvir8M6u0pqK7cWDxXLWie9p/3XbAT5em4WYbYO3EcyqfuknjRcNOoKJ73JvZPzISU5pg6LlHrZ1oCEqsfee9kV6CqLazDpoouqNVVm9SrLJUdL2m0Ti2BZ21aumGctaidX34WCCvj17tEXVXtu7XwDyPYa7asn+O7vXCs+pulOXrcKpq6D/DxrWfLeXlZ7grE05ZUp19UTUt83Kls7y9UtmCpigMy6+6G22tvCsKWHWvWiUwvortdOxV4jyIpb15BWHrmVM15c7EvOqH7gFUeR2g6Hbv5J91eZRGx5Pb8dBg1d1/SnlZlWtHYYputxPPqXaKcTMUNt3WLrT/kCF5ie9LR97S89L5dxGNoNkpsxhiZy00UnRj0OKm2L/9sueksprwps7X1dg3q1Ieqz68gkZ9zIUTyw47y55d583WsWxk8lrmMazlhZDH1HNPfEpqKF1dpyzhpDyPZJiMoZxQQ9kHFlWjKbh+CWdx31npsuusp2ig6FZ9dHVUSXW+pZZbyyQuu1pOQ4onRun5PSj05sJdGVJDD/m0fJEk0+mQhtPpUP1UTv9wTqRE+Cu8DlF0fh+V5ikaIB+jsvvRX+cKlbWvL2/JITdoSHyssnyr7m47Ke0JsxSrPes5udPaeYrQ50u64LRIntJe5N2WwKJROkf31znEzjqooehup1cx3QtE6koBWDXOnFhW9DYaeFOCp9MbYZFElP8aLl0kkVbp5Wbq2+315kF81k/L37+smABFL4YjvsFWUxeVYbTPtWMNXQMmBvuJdXOKbVklbuAOnhm/qbg53Eyvw0F8NoS5prLleo63wAIAAAD7ARQdAAAA2Aeg6AAAAMA+AEUHzZA33Cpe622z9MvCAAAAVBGo6MLDRY1wntTVTzssZVVi4r61P/hnTnZGZqf8zOy0OmfV8qI1QiyX5jHeKGL81lncn4NIP7G0dLlpmq77J6ft1Hn7ylrufqz99HADGkVD9KLyHQFiHvR76PfStORhzOE0MMPqPHIIUXTrwbr2K7Sah4TkCAaU5WRx7QhPIRfUa9khT7u6dooX+Cz92F+Tlu2T6yhZ5JPz/L3e2TNMxStIhsvsocl/a9qWdoTFs7nKWj25+6ywzmGkNCpLtNwUdo8YQTLZWkXPU1sY7qDfa73f0221/LH6Ler3LMp3LvA+vblNiu68XCB2XiOSbYzR3g4/Ug1kQ2V7TE3EnYsCmsOadtyy3nBQ1vwtO5vecStN07zNqjn6dGi/LyRE0SWbpV7bXWv+8pTt3nGrqPco9suCcO2bxIflbvV+3Lkdt7gXkqe+TsWoDPq9FfR7HlvM8+3r9xQViu47HHJft0K1omdvXu+ouExGnXhijcniiYpup6UdflxYr6ftZYdKS2fGqmYRa91xK0sOvsgb3nHLeZlImqaL6TQZEpGz91Yh7EzRm8AnS7PR9u+4VdzDXkVfcrrBijINt3Y/7uiOWxXmPWUZyej3Ksws2e/VWtDZeL+n8fRl4rL70m9FbkClos9GcbYV2Ew16ng0k1p2Z9TODj+8fP6+ziJBfRZLLzPoW+fWGlABr4Nc1wDqnbPZHbemQ4qShdV4o+EwEebo+dJTa4ru1N7SeMPr1DjI8ghxWN2OW8Jue0bxxZXz7EpXuzDbrRbvx13dcavaL6ksnQf9XkWlmvd7k/q7zG2230tTj2JHrFczerrpkvsMNqRS0fXoaBJ3RrN8xC52sC3s8MNot2VXt72g1tmWoldMAzlbseNWhvGFkW7Hi2SYLPSfxX3A234NeFybKrobh1XtuGWOQXj3lRs2pgZLjR6kOXpL96PZKcr6HajoZWLiBqcNWQ/qZ1hZ5hcZ6PdKMy05k0nTSY1d5rao3yufnRid4jYr+kwNaDv5SwhZpOSWrTI5Y8Pqlu3cZkz1dEvwX0sf7pKNMDpd245b0lJP1Wh5sztueX/IrnfFXiTDKGLyXTFHr/I6QNF5qxDy8DisesetVGxPRovRq4IlxirnUGGK3uB+3NEdtyr98pVlKzr6PW5m+X5PMrbd/Z5FaV9mHFxyXbIxAavuwnd9npH70jv85CXaLURPePSExpz5LNGyVQ2cG6e0ZVuzL92mVO1qfFtjz+KK03h9HBNapDa141aO+KNOz1PqFa27wusQRWetojzP6nfc0vnMIhzDrGn7yyrv8OzbqK37cU923CpN4aVT/qM39HuWBdv35fs9s/it7vfCNxK0Hukd6keA1kj1L+PKh9DLrRaunYDJQ+UXUisleFi5UdRkXVpJXyTDSJrIl6+674bXmwPxWT/o99bJbrfwYvEyShL9PeM0iSiKpBnOKgl8Ht0e55jjtZ1p16rSfAzM2hHPuCY89dlzbqbX4SA+mwL93npAC28TvAUWAAAA2Aeg6AAAAMA+AEUHAAAA9gEoOgAAALAPNFT0CXbHWktZ4lOq7pMfZefWe9K3AeuNRjPyh4WWdX2Za1EPFjHhZ0v68R2jQjvzgy0AwApoSdH5r0Db6l0mK9sdS3pHYMljquYj4/U1zH1ieCmEV3Lt4O5Ya8J6LL39CqzmoR85YlJZ9qPAu/0QEABgSZorevaCrULRjW4zf+B/+3fHKuqVv/3IeSeJkdl4UbfPjj8+0guibuzuWLYIFW9xtX2X2ob1lgv3vRb5O7jZFbRekrJ3O2i5L/fAPB2AG0xL36PzidCseK8f18t8JiHmcRR0lbtj6XzmTDqeFHadSfYSsx/plY+dG7o7lvW6TFeljDp724+ld5Ydpuh7v4OW9131AICbR3uK7iwqs75VeOOSOCc20EK1it2xdNXtqZ48oYrjpZZXQ97TaWaqoSI7tzvWLN8AozPSLxp1fedtQ1Ji14571v7voMX1u+TLKQDAftP+HJ2nbOXuWNq+7kPt79jtbnHJojxTv5u5O5a6mKOJ/raA+87bhuFpsW4i2LHO2v8dtKDoAICCQEXXa6De41WKnk62cHcsb3/Nv8Es1bCq+AQqeuHqfu+ONRt14ng0mqWTURzLOykFjfZEO3qKnSn6/u6gZQSnNAUAcEMInaNP9nF3LOlLTjYNDCmpMj5Bq+556Tdid6xiiGHXsPC9dI5u1NCxk2fK7IjzVc+qxg7uoJVy/W7jiygAwI4SquhlUziA+KyeZt+2lC8v7Jj8VT+9Vv1FPABgjwnfew0dhQ/EZy0Yawh1vsXXp/FVoF3eQctYRjCW+HfGIQDACsBbYAEAAIB9AIoOAAAA7ANQdAAAAGAfgKIDAAAA+wAUHQAAANgHoOgAAADAPgBFBwAAAPaB/wfof2ulrHKYvQAAAABJRU5ErkJggg==" alt="" />
aaarticlea/png;base64,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" alt="" />
CORS实际上是在服务端的响应头上添加的标准的Access-Control-Allow-Origin的信息,它是一种跨域资源访问的标准
aaarticlea/png;base64,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I761CidjIsvqXDXPQ+sBrBzDcduQajnnHBsqBgLtLLkqN6id1nSquv7Hnpl+LG+ehMEh06Ks5/zjeuKaEtWKZVtXTGjPzZF3K7SDaetUAbhZtvvF5a2SOCmr+SnJG9ROAACAnUA7AQAAykA7AQAAykA7AQAAykA7AQAAykA7AQAAykA7AT9D73kAABRSSURBVAAAykA7AQAAykA7AQAAykA7AQAAykA7AQAAykA7AQAAykA7AQAAykA7AQAAykA7AQAAykA7AQAAykA7AQAAyvDa2T59/u4P3//e998L/737w/d//PEXutrL4/3d/eNL+Ofd3cNzqpXnh7u7+/v7u7COXSpV4vlhaMB92MIIwCHYbDZy0+v66Wn9av/5un5aqgre2DKsaH2xWW5THQD2idfOd37QfvPnb7uu++677/70zf9+/Yff/e43X3355a/e+cvWqNeL5/Pj/Z1GK9vzw93dw3OvsErYnh+Grf0HSxdfHu/9F88PvY3eqLRz9/AYdmpCZQH2w2b5VvK0fn3dbF59CS93r+uloW6b5du3T+vXpPhFtTbrQUVD0e57sdy8rp+GTkxILADshtfO733/va7r/u/Pf/rj1//z+9/++r+++vL/ffkf//nLn/fbpwmV1FKrQOacUuoCDw8Jj/Elluj7+3tLG4VH+vI45+cC7IXNev3aecnSytVLZy+mg+5ZErlZLjcJr/J1vVy/Oo1ervvGlsuNbCSusdfdBABPpJ3f/PHrP/z+N//965evXtZfrr/41S8++8XyOaGdzw93948vQtbCednBDdTcPzzcR07kKHnPCe0c/VFtMdJpq0G0Ew7PoJ3LaJJ2PQjZZvn27dvlctl7o2svcME87mbppdbUzs1ydEqldxuVUb7vIfYWADqhnb/9zVeLmM+ef6K1U7qBoz657U7Sxueg7iGk5XWOhaKJ2ejr+/t7pYIvj/diE34nnAbT71STtJvlcrNZDiraC2ngNY4PQS138XW9XjstDja/RgXxOwGOSKSd/STtLz//9It/++jfP/nHTz/64ON/+ttpv1N6e4bECY8x+QTSa2evpvePL4NEPvcrk/A74SyZ0c5+lrb3RL0/OjU5O3zq/dLX9XL9OtSLfMunpyV+J8CJiLSzn6Rdfvrhzz7++3/98L2fvv3rDz/4UY529homFt/6gr3OPSpH8MVcanR3d+fk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" alt="" />
可以看到,jsonp实现上是一种远程JS方法的调用,客户端发起一个HTTP请求,这通过callback参数(一串随机数)来区别多个客户端,每个客户端的请求callback都是不同的,它们由服务器端处理数据,再通过callback随机数去为指定客户端返回数据。
转:http://www.cnblogs.com/lori/p/3557111.html
在WebApi中实现Cors访问的更多相关文章
- WebApi系列~在WebApi中实现Cors访问
回到目录 说在前 Cors是个比较热的技术,这在蒋金楠的博客里也有体现,Cors简单来说就是“跨域资源访问”的意思,这种访问我们指的是Ajax实现的异步访问,形象点说就是,一个A网站公开一些接口方法, ...
- ASP.NET MVC & WebApi 中实现Cors来让Ajax可以跨域访问 (转载)
什么是Cors? CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing).它允许浏览器向跨源服务器,发出XMLHttpReq ...
- Asp.Net WebApi+Microsoft.AspNet.WebApi.Core 启用CORS跨域访问
WebApi中启用CORS跨域访问 1.安装 Nugget包Microsoft.AspNet.WebApi.Cors This package contains the components to e ...
- 使用Cors在WebApi中实现跨域请求,请求方式为angular的 $http.jsonp
使用Cors在WebApi中实现跨域请求 第一步,在webapi项目中安装cors 在Web API配置文件中(Global.asax)进行全局配置: public class WebApiAppli ...
- html网页访问WebAPI中的方法遇到的问题
1.移动端访问远程服务时,建议使用WebAPI 2.用不同浏览器访问WebAPI时返回的文本格式是不同的,Chrome Firefox将在浏览器中以XML形式显示此列表,IE浏览器将获得Json格 ...
- 【Azure API 管理】从微信小程序访问APIM出现200的空响应的问题中发现CORS的属性[terminate-unmatched-request]功能
问题描述 使用微信小程序调用APIM(API Management)中的接口,发现POST和PUT请求被拦截,返回的状态码为200,但是无消息内容. 在小程序中的调用JS代码如: 通过浏览器测试得到的 ...
- 如何在ASP.NET Core中实现CORS跨域
注:下载本文的完整代码示例请访问 > How to enable CORS(Cross-origin resource sharing) in ASP.NET Core 如何在ASP.NET C ...
- webapi 中的本地登录
WebApi 身份验证方式 asp.net WebApi 中有三种身份验证方式 个人用户账户.用户可以在网站注册,也可以使用 google, facebook 等外部服务登录. 工作和学校账户.使用活 ...
- webapi支持跨域访问
写在前面 在实际应用中,跨域请求还是比较常见的,如何上接口直接支持跨域的访问呢? demo 场景项目A有个接口用来获取用户列表,现在项目b也有个功能需要加载用户列表.这两个项目在两个域名下,至少端口好 ...
随机推荐
- 【读书笔记】iOS-UIWindow-WindowLevel
WindowLevel是UIWindow的一个属性.系统定义的一共有3种. UIKIT_EXTERN const UIWindowLevel UIWindowLevelNormal; UIKIT_EX ...
- Effective Java 08 Obey the general contract when overriding equals
When it's the case that each instance of the class is equal to only itself. 1. Each instance of the ...
- Effective Java 11 Override clone judiciously
Principles If you override the clone method in a nonfinal class, you should return an object obtaine ...
- Effective Java 35 Prefer annotations to naming patterns
Disadvantages of naming patterns Typographical errors may result in silent failures. There is no way ...
- 工作中常用的Linux命令:目录
工作两三年,每天都和Linux打交道,但每每使用Linux命令的时候却会像提笔忘字般不知如何使用,常常查手册或到网上找资料.此系列文章主要是为了方便自己在使用命令时随时可查阅.鄙人才疏学浅,文中若有任 ...
- hdu 4856 Tunnels (记忆化搜索)
Tunnels Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- Hive UDF 实验1
项目中使用的hive版本低于0.11,无法使用hive在0.11中新加的开窗分析函数. 在项目中需要使用到row_number()函数的地方,有人写了udf来实现这个功能. new java proj ...
- 再学TSQL基础--单表查询
本内容是我学习tsql2008的阅读笔记 什么是关系模型? 若对列创建唯一约束,背后中的物理机制也是创建了一个唯一索引. SQL语句的逻辑解析顺序是FROM WHERE GROUP BY HAVING ...
- [书目20160218]微软软件研发的奥秘:MSF精髓
目录 第一部分 解决方案交付基础 第1章 什么是MSF,它适合你吗 2 1.1 MSF的历史和起源 2 1.2 为什么是“框架” 3 1.3 MSF有何不同 5 1.4 MSF第四版的要素 5 1.5 ...
- 【OpenGL】交互式三次 Bezier 曲线
1. 来源 三次贝塞尔曲线就是依据四个位置任意的点坐标绘制出的一条光滑曲线 2. 公式 3. 实现 #include <iostream> #include <math.h> ...