概述


跨域资源共享(CORS )是一种网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源。而这种访问是被同源策略所禁止的。CORS系统定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求。 它是一个妥协,有更大的灵活性,但比起简单地允许所有这些的要求来说更加安全。 本文已经同步到《Asp.net Vnext 系列教程 》中]

CORS通过设置HTTP Header(标头)设置网站跨域存取。

Access-Control-Allow-Origin 允许跨域访问的域,可以是一个域的列表,也可以是通配符"*"。
Access-Control-Allow-Credentials 默认情况下,跨源请求不提供凭据(cookie、HTTP认证及客户端SSL证明等)。通过将withCredentials属性设置为true,可以指定某个请求应该发送凭据。如果服务器接收带凭据的请求,会用下面的HTTP头部来响应
Access-Control-Expose-Headers 需要向客户端公开的标头。
Access-Control-Allow-Methods 允许使用的请求方法,以逗号隔开
Access-Control-Allow-Headers  允许自定义的头部,以逗号隔开,大小写不敏感

实例代码


启动类

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddMvc();
  4. services.ConfigureCors(options =>
  5. {
  6. options.AddPolicy(
  7. "AllowAnySimpleRequest",
  8. builder =>
  9. {
  10. //允许全部访问域
  11. builder.AllowAnyOrigin()
  12. //允许全部请求方法 //允许全部标头 //允许全部凭据
  13. .AllowAnyMethod().AllowAnyHeader().AllowCredentials();
  14. });
  15.  
  16. options.AddPolicy(
  17. "AllowSpecificOrigin",
  18. builder =>
  19. {
  20. builder.AllowCredentials().WithOrigins("http://localhost:57096/")
  21. //只允许 post
  22. .WithMethods("POST")
  23. .AllowAnyHeader()
  24. //公开的标头
  25. . WithExposedHeaders("exposed11", "exposed22");
  26.  
  27. });
  28.  
  29. });
  30. }

控制器

  1. [Route("Cors/[action]")]
  2. [EnableCors("AllowAnySimpleRequest")]
  3. public class BlogController : Controller
  4. {
  5. [EnableCors("AllowSpecificOrigin")]
  6. public IEnumerable<string> GetBlogComments(int id)
  7. {
  8. return new[] { "comment1", "comment2", "comment3" };
  9. }

1.新建一个Mvc程序

2.控制器

  1. public class HomeController : Controller
  2. {
  3. // GET: Home
  4. public ActionResult Index()
  5. {
  6. //加入Cookie
  7. Response.Cookies.Add(new HttpCookie("") { Value = "", Expires = DateTime.Now.AddDays() });
  8.  
  9. return View();
  10. }
  11. }

视图

  1. @{
  2. Layout = null;
  3. }
  4.  
  5. <!DOCTYPE html>
  6.  
  7. <html>
  8. <head>
  9. <meta name="viewport" content="width=device-width" />
  10. <title>Index</title>
  11. <script src="~/Scripts/jquery-1.10.2.js"></script>
  12. <script type="text/javascript"></script>
  13. </head>
  14. <body>
  15. <div>
  16. <input type="button" id="cros" value="获取跨域" />
  17. <div id="msg"></div>
  18. </div>
  19. <script type="text/javascript">
  20. $(function () {
  21. $("#cros").click(function () {
  22. $.ajax({
  23.  
  24. url: "http://localhost:49271/Cors/GetBlogComments",
  25. type: "POST",
  26. success: function (d) {
  27. $("#msg").html(d)
  28. }
  29. })
  30.  
  31. });
  32. });
  33. </script>
  34. </body>
  35.  
  36. </html>

已经加入要公开的标头了。

修改一视图,支持跨域Cookie

  1. @{
  2. Layout = null;
  3. }
  4.  
  5. <!DOCTYPE html>
  6.  
  7. <html>
  8. <head>
  9. <meta name="viewport" content="width=device-width" />
  10. <title>Index</title>
  11. <script src="~/Scripts/jquery-1.10.2.js"></script>
  12. <script type="text/javascript">
  13. window.onload = function ()
  14. {
  15. alert("");
  16. var xhr = new XMLHttpRequest();
  17. xhr.open("get", "http://localhost:49271/Cors/GetBlogComments", true);
  18. xhr.withCredentials = true; //支持跨域发送cookies
  19. xhr.send();
  20. }
  21. </script>
  22. </head>
  23. <body>
  24. <div>
  25. <input type="button" id="cros" value="获取跨域" />
  26. <div id="msg"></div>
  27. </div>
  28. <script type="text/javascript">
  29. $(function () {
  30. $("#cros").click(function () {
  31. $.ajax({
  32.  
  33. url: "http://localhost:49271/Cors/GetBlogComments",
  34. type: "POST",
  35. success: function (d) {
  36. $("#msg").html(d)
  37. }
  38. })
  39.  
  40. });
  41. });
  42. </script>
  43. </body>
  44.  
  45. </html>

已经获得Cookie。

得到你的肯定是我最大的动力。

Asp.net Vnext api CORS( 跨域)的更多相关文章

  1. Asp.Net WebApi 启用CORS跨域访问指定多个域名

    1.后台action指定 EnableCors指定可访问的域名多个,使用逗号隔开 //支持客户端凭据提交,指定多个域名,使用逗号隔开 [EnableCors("http://localhos ...

  2. ASP.NET Web API决跨域问题

    记录最近一次的项目开发中遇到的问题和解决方式.在给移动端开放数据接口的时候,移动端开放人员反映部署到测试环境的接口调用访问出现了问题,但是在单独进行访问是可以正常的.那么,问题就来了. 根据查询园子里 ...

  3. ASP.NET Core SignalR CORS 跨域问题

    将 SignalR 集成到 ASP.NET Core api 程序的时候,按照官方 DEMO 配置完成,本地访问没有问题,但是发布之后一直报跨域问题,本地是这样设置的: 原始代码: services. ...

  4. ASP.net Web API允许跨域访问解决办法

    来源 http://blog.csdn.net/wxg_kingwolfmsncn/article/details/48545099 遇到此跨域访问问题,解决办法如下:   方法一:   1. 在we ...

  5. ASP.NET Web API 启用跨域访问

    自定义特性 要在WebApi中实现JSONP,一种方式是实现自定义特性  http://stackoverflow.com/questions/9421312/jsonp-with-asp-net-w ...

  6. AngulaJs+Web Api Cors 跨域访问失败的解决办法

    //在服务的WebConfig文件中添加以下代码即可 //如节点已存在请去掉 <system.webServer> <httpProtocol> <customHeade ...

  7. 基于.Net Framework 4.0 Web API开发(5):ASP.NET Web APIs AJAX 跨域请求解决办法(CORS实现)

    概述:  ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题,特 ...

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

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

  9. Asp.net Core CORS 跨域

    本文主要介绍在Asp.net Core采用CORS方式解决跨域 关于跨域的原理介绍可参考Asp.net Web API 解决跨域详解 1 在Startup添加允许跨域的策略 services.AddC ...

随机推荐

  1. 使用xib封装一个自定义view的步骤

    使用xib封装一个自定义view的步骤 1> 新建一个继承UIView的自定义view,假设类名叫做(MJAppView) 2> 新建一个MJAppView.xib文件来描述MJAppVi ...

  2. Java基础之泛型——使用泛型链表类型(TryGenericLinkedList)

    控制台程序 定义Point类: public class Point { // Create a point from its coordinates public Point(double xVal ...

  3. asp.net mvc 后台怎么接受前端返回的array list dictionary

    参考了别人的文章,我这样尝试去写: 数据源:memberInRoles var memberInRoles= {}; for(var i=0;i<sureOptions.length;i++){ ...

  4. centos Flash Player插件的安装

    关于Flash Player插件的安装,其实Fedora官方Wiki文档已经给出了详细的说明,我这里再把重点提取一下: 1. 首先到Adobe Flash Plugin官方下载页面选择YUM for ...

  5. Leetcode: Frog Jump

    A frog is crossing a river. The river is divided into x units and at each unit there may or may not ...

  6. 转:Curl详解

    用途说明 curl命令是一个功能强大的网络工具,它能够通过http.ftp等方式下载文件,也能够上传文件.其实curl远不止前面所说的那些功能,大家可以通过man curl阅读手册页获取更多的信息.类 ...

  7. 转:python webdriver API 之对话框处理

    页面上弹出的对话框是自动化测试经常会遇到的一个问题:很多情况下对话框是一个 iframe,如上一节中介绍的例子,处理起来稍微有点麻烦:但现在很多前端框架的对话框是 div 形式的,这就让我们的处理变得 ...

  8. [Reprint]C++普通函数指针与成员函数指针实例解析

    这篇文章主要介绍了C++普通函数指针与成员函数指针,很重要的知识点,需要的朋友可以参考下   C++的函数指针(function pointer)是通过指向函数的指针间接调用函数.相信很多人对指向一般 ...

  9. [原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  10. Java基础(62):Eclipse调试(Debug)的10条技巧(转)

    在看这篇文章前,我推荐你看一下Eclipse 快捷键手册 先提三点 不要使用System.out.println作为调试工具 启用所有组件的详细的日志记录级别 使用一个日志分析器来阅读日志 1.条件断 ...