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,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" 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访问的更多相关文章

  1. WebApi系列~在WebApi中实现Cors访问

    回到目录 说在前 Cors是个比较热的技术,这在蒋金楠的博客里也有体现,Cors简单来说就是“跨域资源访问”的意思,这种访问我们指的是Ajax实现的异步访问,形象点说就是,一个A网站公开一些接口方法, ...

  2. ASP.NET MVC & WebApi 中实现Cors来让Ajax可以跨域访问 (转载)

    什么是Cors? CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing).它允许浏览器向跨源服务器,发出XMLHttpReq ...

  3. Asp.Net WebApi+Microsoft.AspNet.WebApi.Core 启用CORS跨域访问

    WebApi中启用CORS跨域访问 1.安装 Nugget包Microsoft.AspNet.WebApi.Cors This package contains the components to e ...

  4. 使用Cors在WebApi中实现跨域请求,请求方式为angular的 $http.jsonp

    使用Cors在WebApi中实现跨域请求 第一步,在webapi项目中安装cors 在Web API配置文件中(Global.asax)进行全局配置: public class WebApiAppli ...

  5. html网页访问WebAPI中的方法遇到的问题

      1.移动端访问远程服务时,建议使用WebAPI 2.用不同浏览器访问WebAPI时返回的文本格式是不同的,Chrome Firefox将在浏览器中以XML形式显示此列表,IE浏览器将获得Json格 ...

  6. 【Azure API 管理】从微信小程序访问APIM出现200的空响应的问题中发现CORS的属性[terminate-unmatched-request]功能

    问题描述 使用微信小程序调用APIM(API Management)中的接口,发现POST和PUT请求被拦截,返回的状态码为200,但是无消息内容. 在小程序中的调用JS代码如: 通过浏览器测试得到的 ...

  7. 如何在ASP.NET Core中实现CORS跨域

    注:下载本文的完整代码示例请访问 > How to enable CORS(Cross-origin resource sharing) in ASP.NET Core 如何在ASP.NET C ...

  8. webapi 中的本地登录

    WebApi 身份验证方式 asp.net WebApi 中有三种身份验证方式 个人用户账户.用户可以在网站注册,也可以使用 google, facebook 等外部服务登录. 工作和学校账户.使用活 ...

  9. webapi支持跨域访问

    写在前面 在实际应用中,跨域请求还是比较常见的,如何上接口直接支持跨域的访问呢? demo 场景项目A有个接口用来获取用户列表,现在项目b也有个功能需要加载用户列表.这两个项目在两个域名下,至少端口好 ...

随机推荐

  1. Class org.apache.struts2.json.JSONWriter can not access a member of class org.springframework.aop.TruePointcut with modifiers "public"

    Spring注入Action使用Json错误:org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: ...

  2. iOS之UI--CAGradientLayer

    1.CAGradientLayer 简介 如果说CAShapeLayer是用于提供设置形状的,那么CAGradientLayer是用于提供设置颜色的 英语单词:Gradient:梯度,渐变 那么Gra ...

  3. 听说你会打地鼠(动态规划dp)

    题目来源:https://biancheng.love/contest-ng/index.html#/41/problems G 听说你会打地鼠 时间限制:300ms   内存限制:65536kb 题 ...

  4. linux NFS服务器安装与配置 思路

    一,nfs服务优缺点 NFS 是Network File System的缩写,即网络文件系统,可以让不同的客户端挂载使用同一个目录,作为共享存储使用,这样可以保证不同的节点客户端数据一致性,在集群架构 ...

  5. nginx location匹配规则

    谢谢作者的分享精神,原文地址:http://www.nginx.cn/115.html location匹配命令 ~      #波浪线表示执行一个正则匹配,区分大小写~*    #表示执行一个正则匹 ...

  6. C++静态计算的例子

    写一个函数,用递归函数完成以下运算: sum(n) =  1 – 1/2 + 1/3 – 1/4 + … -(1/n)*(-1)n        (其中n>0) 函数原型:         fl ...

  7. Effective Java 27 Favor generic methods

    Static utility methods are particularly good candidates for generification. The type parameter list, ...

  8. Mysql在windows下和linux下对表名大小写默认要求的一个细节

    今天在虚拟机里搭建项目环境,偷了下懒,直接把本机数据库中的表用sqlyog复制给虚拟机中的数据库,然后开始部署项目,项目一启动提示: Table 'sdmqrt.QRTZ_LOCKS' doesn't ...

  9. 如何去设计一个自适应的网页设计或HTMl5

    如何去设计一个自适应的网页设计或HTMl5 如今移动互联网随着3G的普及,越来越火爆,更多需求跟随而来!APP应用市场和APP应用数量成倍成倍的增长!从而给移动互联网带来新的挑战! 移动设备正超过桌面 ...

  10. quick sort java version

    import java.util.Random; public class test { public static void main(String[] args) { int[] arr= gen ...