解决postMessage跨域问题

在HTML5中新增了postMessage方法,postMessage可以实现跨文档消息传输(Cross Document Messaging),Internet Explorer 8, Firefox 3, Opera 9, Chrome 3和 Safari 4都支持postMessage。 该方法可以通过绑定window的message事件来监听发送跨文档消息传输内容。   1. postMessage是HTML5 XMLHttpRequest Level 2中的API,且是为数不多可以跨域操作的window属性之一,它可用于解决以下方面的问题: a.) 页面和其打开的新窗口的数据传递 b.) 多窗口之间消息传递 c.) 页面与嵌套的iframe消息传递 d.) 上面三个场景的跨域数据传递 2. postMessage用法:

参数说明: data: html5规范支持任意基本类型或可复制的对象,但部分浏览器只支持字符串,所以传参时最好用JSON.stringify()序列化。 origin: 协议+主机+端口号,也可以设置为"*",表示可以传递给任意窗口,如果要指定和当前窗口同源的话设置为"/"。   举例说明: 两个页面之间进行数据传输,postMessage示例: 我启动了两个ip地址来代表不同域名,页面t_hotnotes_list.html插入如下代码

页面search_role.html插入如下代码:

当两个服务启动之后,我们在浏览器中打开页面t_hotnotes_list.html

得到如下图结果,t_hotnotes_list.html得到两个页面的数据     from:https://www.cnblogs.com/yyy6/p/9481671.html

龙生   21 Apr 2020
View Details

postMessage的使用

一、简介# 1、postMessage()方法允许来自不同源的脚本采用异步方式进行有限的通信,可以实现跨文本档、多窗口、跨域消息传递 2、postMessage(data,origin)方法接受两个参数: (1)data:要传递的数据,html5规范中提到该参数可以是JavaScript的任意基本类型或可复制的对象,然而并不是所有浏览器都做到了这点儿,部分浏览器只能处理字符串参数,所以我们在传递参数的时候需要使用JSON.stringify()方法对对象参数序列化,在低版本IE中引用json2.js可以实现类似效果, (2)origin:字符串参数,指明目标窗口的源,协议+主机+端口号[+URL],URL会被忽略,所以可以不写,这个参数是为了安全考虑,postMessage()方法只会将message传递给指定窗口,当然如果愿意也可以建参数设置为"*",这样可以传递给任意窗口,如果要指定和当前窗口同源的话设置为"/"; 二、使用# 1、子页面向父页面传递消息 <!-- frame1.html --> <h1>iframe1 page</h1> <script>   window.top.postMessage('message from iframe1'); </script> 2、父页面向子页面传递消息

    from:https://www.cnblogs.com/EricZLin/p/10534537.html

龙生   21 Apr 2020
View Details

Dapper.Contrib:GetAsync only supports an entity with a [Key] or an [ExplicitKey]

property 异常处理:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 原来Model是这样滴 修改后是这样滴 注意点:Model里面的Table和Key是Dapper.Contrib.Extensions命名空间下的 成功~   from:https://www.cnblogs.com/dunitian/p/5710467.html

龙生   20 Apr 2020
View Details

DapperExtensions的基本用法

介绍下使用Dapper-Extensions的基本语法 //实体类 DemoEntity entity = new DemoEntity(); //根据实体主键删除 this.Delete<DemoEntity>(entity); //根据主键ID删除 this.Delete<DemoEntity>(1); //增加 this.Insert<DemoEntity>(entity); //更新 bool result = this.Update<DemoEntity>(entity); //根据主键返回实体 entity = this.GetById<DemoEntity>(1); //返回 行数 this.Count<DemoEntity>(new { ID = 1 }); //查询所有 IEnumerable<DemoEntity> list = this.GetAll<DemoEntity>(); IList<ISort> sort = new List<ISort>(); sort.Add(new Sort { PropertyName = "ID", Ascending = false }); //条件查询 list = this.GetList<DemoEntity>(new { ID = 1, Name = "123" }, sort); //orm 拼接条件 查询 IList<IPredicate> predList = new List<IPredicate>(); predList.Add(Predicates.Field<DemoEntity>(p => p.Name, Operator.Like, "不知道%")); predList.Add(Predicates.Field<DemoEntity>(p => p.ID, Operator.Eq, 1)); IPredicateGroup predGroup = Predicates.Group(GroupOperator.And, predList.ToArray());   list […]

龙生   17 Apr 2020
View Details

Asp.Net WebApi一个简单的Token验证

1、前言 WebAPI主要开放数据给手机APP,Pad,其他需要得知数据的系统,或者软件应用。Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能。我上次写的《Asp.Net MVC WebAPI的创建与前台Jquery ajax后台HttpClient调用详解》这种跟明显安全性不是那么好,于是乎这个就来了 ,用户需要访问的API都必须带有票据过来,说白了就是登陆之后含有用户信息的Token。开始撸… 2、新建一个WebApi项目 在App_Start文件夹下面新建一个BaseApiController控制器,这是基础的Api控制器,后面有要验证的接口都继承这个控制器:

这个构造函数里主动加一个header头信息 ,因为每次访问的时候都要执行构造函数,在那边验证的时候都要从Header中取出来,计算出用户名 是否跟Session缓存的一致这样判断的 3、在建一个TokenCheckFilter.cs 继承AuthorizeAttribute重写基类的验证方式,重写HandleUnauthorizedRequest

  4、在WebApiConfig.cs配置文件里面修改一下路由加上/{action},这样就能调用到具体的哪一个了       Webapi默认是不支持Session的,所以我们需要在Global加载时候添加对Session的支持,在Global.asax里面重写Application_PostAuthorizeRequest,不然运行调用会直接异常

    5、现在来写一个登陆 新建一个控制器LoginController继承BaseApiController 里面写一个登陆的方法Login 登陆页面就直接在Home的index里面写一个简单的就行了这个控制器访问就不受限制了加上注解

  登陆页面 简单而粗暴  

        登陆这个我是写了链接数据库的自己练习可以最易更改一个固定的值 现在应该可以看到返回的Token数据了       6、现在就可以写Api 都继承BaseApiController这个控制器的方法上面需要验证的都要加上验证的注解,我是整个控制都要就直接写在类上面了,随便写一个举举例子,就比如全国省市县的查询

    记录一个EF随意取数据库条数信息是这么写的 var data = db.CnblogsList.OrderBy(p => Guid.NewGuid()).Take(100); 现在看效果图      没有登陆的时候是进不去的 postman上面的效果也看一下     效果都是一样的,如果登录了就可以直接访问 了 不用加参数 ,只有方法需要参数的就可以加             这里贴一个调用的代码:

  7、总结 1)、总体思路,如果是合法的Http请求,在Http请求头中会有用户身份的票据信息,服务端会读取票据信息,并校验票据信息是否完整有效,如果满足校验要求,则进行业务数据的处理,并返回给请求发起方; 2) 如果没有票据信息,或者票据信息不是合法的,则返回“未授权的访问”异常消息给前端,由前端处理此异常。 3)、登录的时候判断用户名跟密码对不对,对了就生成用户信息的Token,Session保存一个Token,BaseApiController里面的登录名跟Token也赋值了。保存这些票据信息。 4)、当用户有权限操作页面或页面元素时,跳转到页面,并由页面Controller提交业务数据处理请求到api服务器; 如果用户没有权限访问该页面或页面元素时,则显示“未授权的访问操作”,跳转到系统异常处理页面。 5)、 api业务服务处理业务逻辑,并将结果以Json 数据返回,返回渲染后的页面给浏览器前端,并呈现业务数据到页面; 8、测试地址 http://www.yijianlan.com:8001/   ———————->先登录,用户名 test密码 […]

龙生   17 Apr 2020
View Details

C#WebAPI返回json去掉双引号前面的反斜杠

  from:https://www.cnblogs.com/taozihua/articles/8716362.html

龙生   17 Apr 2020
View Details

vue css中scoped

1、什么是scoped vue组件中,在style标签中有一个属性,叫做scoped。当此标签拥有scoped属性的时候,该组件下的css样式只适用于本组件,而不会影响全局组件。这其实也相当于样式的模块化了。 2、scoped实现的原理 其实scoped中最重要的就是PostCSS,PostCSS是一种css的编译的工具。来看一下转译之前的代码: 编译前的代码:

  编译之后的代码:

  编译后,我们发现css中,PostCSS给所有的dom都添加了一个独一无二的动态属性,给css选择器也添加了一个对应的属性选择器,这样就可以让样式只作用于该属性的dom元素(组件内部的dom)。   from:https://www.cnblogs.com/marksir/p/11685350.html

龙生   15 Apr 2020
View Details

ASP.NET Core中如何配置Kestrel Urls呢,大家可能都知道使用UseUrls() 方法来配置。

今天给介绍全面的ASP.NET Core 配置 Urls,使用多种方式配置Urls。 让你了解ASP.NET Core Kestrel 的地址设置。 下面我们就来了解如何配置。我将介绍4种方式来配置Urls。 1、UseUrls方法 大家最熟悉的一种也就是使用UseUrls 。下面我们就来实际使用。 UseUrls 方法可以使用多个地址,也可以使用一个地址。 单个网址  UseUrls("http://localhost:5001") 多个网址 UseUrls("http://localhost:5001", "http://localhost:5002", "http://*:5003") //多个地址 *代表绑定所有本机地址 可以局域网访问,拥有外网ip 就可以外网访问   2、配置文件 下面使用配置文件来设置网址。 1).首先在项目中添加一个ASP.NET 配置文件hosting.json,在配置文件中加入server.urls 节点。 { "server.urls": "http://localhost:5001;http://localhost:5002;http://*:5003"} 2).这里首先需要添加两个引用 "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0" "Microsoft.Extensions.Configuration.Json": "1.0.0" 3).Main方法添加配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public static void Main(string[] args) { var config = new ConfigurationBuilder()     .SetBasePath(Directory.GetCurrentDirectory())     // 这里添加配置文件     .AddJsonFile(Path.Combine("config", "hosting.json"), true)     .Build(); var host = new WebHostBuilder()     .UseKestrel()     // 添加配置     .UseConfiguration(config)     .UseContentRoot(Directory.GetCurrentDirectory())     .UseIISIntegration()     .UseStartup<Startup>()     .Build(); host.Run(); } 4).最后别忘了在project.json中添加输出配置,直接把整个config目录放进去了 1 2 3 4 5 6 7 8 […]

龙生   14 Apr 2020
View Details

.Net Core 2.2 项目部署到IIS

1、安装IIS所需的Host扩展 从官网(https://dotnet.microsoft.com/download/dotnet-core/2.2)下载对应的.net core版本的Runtime 里面有一个Runtime & Hosting Bundle,是IIS需要的模块扩展,用来处理Core相关的请求。 下载举例:https://dotnet.microsoft.com/download/thank-you/dotnet-runtime-2.2.5-windows-hosting-bundle-installer 2、安装模块拓展,并且查看IIS模块列表是否生效 注意,.Net Core 2.0之后的模块名叫AspNetCoreModuleV2,之前的模块名叫AspNetCoreModule,可以共存。 3、导出您的.Net Core项目到本地某文件夹位置。 3.1 主项目右键,点击“发布”。 3.2 发布目标,选“文件夹”,选择你想要的本地目录,用来存放这个Site所有的文件。 3.3 点击“发布”,成功生成项目发布文件。 这里注意处理下数据库,比如你的Sqllite数据库,是否已经完成复制过去,记得单独检查一下。 4、IIS中添加对应的网站,相关端口、IP可根据需要配置,或保持默认即可。 网站物理路径,选择刚才导出发布所在文件夹即可。 5、浏览网站即可访问。 如果出现500之类的错误,一方面检查之前的模块是否安装到位,一方面检查下数据库等文件和配置是否配置正确即可。 6、部分网络教程会提示,要把应用程序池改成未托管,不过经过实践,2.2版本不需要配置也可以正常运行,如果想配置的,找到Site对应的应用程序池,改成无托管代码即可。   from:https://www.cnblogs.com/craigtaylor/p/11143484.html

龙生   14 Apr 2020
View Details

asp.net+mysql解决Incorrect string value: '\xF0\x9F\x98\xAD

ALTER DATABASE 数据库 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ALTER TABLE 表 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 数据库连接字符串加上:charset=utf8mb4    

龙生   13 Apr 2020
View Details
1 127 128 129 412