概述


跨域资源共享(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  允许自定义的头部,以逗号隔开,大小写不敏感

实例代码


启动类

     public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.ConfigureCors(options =>
{
options.AddPolicy(
"AllowAnySimpleRequest",
builder =>
{
//允许全部访问域
builder.AllowAnyOrigin()
//允许全部请求方法 //允许全部标头 //允许全部凭据
.AllowAnyMethod().AllowAnyHeader().AllowCredentials();
}); options.AddPolicy(
"AllowSpecificOrigin",
builder =>
{
builder.AllowCredentials().WithOrigins("http://localhost:57096/")
//只允许 post
.WithMethods("POST")
.AllowAnyHeader()
//公开的标头
. WithExposedHeaders("exposed11", "exposed22"); }); });
}

控制器

  [Route("Cors/[action]")]
[EnableCors("AllowAnySimpleRequest")]
public class BlogController : Controller
{
[EnableCors("AllowSpecificOrigin")]
public IEnumerable<string> GetBlogComments(int id)
{
return new[] { "comment1", "comment2", "comment3" };
}

1.新建一个Mvc程序

2.控制器

 public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
//加入Cookie
Response.Cookies.Add(new HttpCookie("") { Value = "", Expires = DateTime.Now.AddDays() }); return View();
}
}

视图

@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="~/Scripts/jquery-1.10.2.js"></script>
<script type="text/javascript"></script>
</head>
<body>
<div>
<input type="button" id="cros" value="获取跨域" />
<div id="msg"></div>
</div>
<script type="text/javascript">
$(function () {
$("#cros").click(function () {
$.ajax({ url: "http://localhost:49271/Cors/GetBlogComments",
type: "POST",
success: function (d) {
$("#msg").html(d)
}
}) });
});
</script>
</body> </html>

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

修改一视图,支持跨域Cookie

@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="~/Scripts/jquery-1.10.2.js"></script>
<script type="text/javascript">
window.onload = function ()
{
alert("");
var xhr = new XMLHttpRequest();
xhr.open("get", "http://localhost:49271/Cors/GetBlogComments", true);
xhr.withCredentials = true; //支持跨域发送cookies
xhr.send();
}
</script>
</head>
<body>
<div>
<input type="button" id="cros" value="获取跨域" />
<div id="msg"></div>
</div>
<script type="text/javascript">
$(function () {
$("#cros").click(function () {
$.ajax({ url: "http://localhost:49271/Cors/GetBlogComments",
type: "POST",
success: function (d) {
$("#msg").html(d)
}
}) });
});
</script>
</body> </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. iOS 瀑布流的基本原理

    /** * 源代码链接 * 链接: https://pan.baidu.com/s/1nvLamEX 密码: kya5 */ #import <UIKit/UIKit.h> @interf ...

  2. poj 算法 分类

    转载请注明出处:優YoU http://blog.csdn.net/lyy289065406/article/details/6642573 最近AC题:2528   更新时间:2011.09.22  ...

  3. poj 题目分类(1)

    poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...

  4. 利用Hudson持续集成来执行Android自动化测试(转)

    当你套用Athrun.Robotium等框架,针对自己的项目写完了一堆自动化测试脚本后,在Eclipse之外怎么让它们可以持续性地跑起来并展现报告呢? 据我了解,方便的方法大致有两个:其一,利用Hud ...

  5. BeanFactory

            Spring容器,最基本的接口就是BeanFactory 负责创建,配置,管理bean 它有一个子接口ApplicationContext并将功能扩展.         理论上bean ...

  6. 异常:Struts:org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find BasicDataSource

    org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.apache.common ...

  7. mldn android

    ed2k://|file|%E9%AD%94%E4%B9%90%E7%A7%91%E6%8A%80_Android%E5%BC%80%E5%8F%91%E5%AE%9E%E6%88%98%E7%BB% ...

  8. (转)SQL对Xml字段的操作

    T-Sql操作Xml数据 一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和 ...

  9. java 虚拟机工具

    jps 命令 可以查询开启了rmi服务的远程虚拟机进程状态. -v jvm参数. jstat -gcutil命令 [cangyue@/System/Library/Frameworks/JavaVM. ...

  10. windows下nginx和php环境的配置

    至于php的配置,与之前博文中使用apache服务器时一样. 对于nginx的配置,来看看如何修改配置文件: #user nobody; worker_processes ; #error_log l ...