摘要:
一. WebApi自带生成api文档 1. 说明 通过观察,发现WebApi项目中Area文件夹下有一个HelpPage文件夹,如下图,该文件夹就是WebApi自带的生成Api的方式,如果该文件夹没了,可以通过Nuget安装:Microsoft.AspNet.WebApi.HelpPage ,你就会 阅读全文
摘要:
一. 说明 持续更新,从2.x版本开始编写,经历了3.x版本,5.x版本、6.x版本、7.x版本、8.x版本,目前最新的是8.x版本,已完结 Core9.0 再来。。。。 二. 系列章节 第一节:.Net Core环境的安装和常用指令 第二节:SSL证书的申请、配置(IIS通用)及跳转Https请求 阅读全文
摘要:
一. 背景和方案 1. 多版本管理的概念 Android 、IOS等 App 存在着多版本客户端共存的问题:App 最新版已经升级到了5.0 了,但是有的用户手机上还运行着 4.8、3.9 甚至2.2 版本的 App,由于早期没有内置升级机制、用户不会升级、用户拒绝升级等原因,造成这些旧版本 App 阅读全文
摘要:
一. 简介 简介: 上一节中,主要介绍了JWT校验,它是无状态的,是基于Token校验的一种升级,它适用的范围很广泛,APP、JS前端、后台等等客户端调用服务器端的校验。本节补充几种后台接口的校验方式,它主要适用于后台代码的调用,不适合JS、APP等客户端直接调用。 PS:在一些对接一些银行接口或者 阅读全文
摘要:
一. 简介 1. 背景 传统的基于Session的校验存在诸多问题,比如:Session过期、服务器开销过大、不能分布式部署、不适合前后端分离的项目。 传统的基于Token的校验需要存储Key-Value信息,存在Session或数据库中都有弊端,如果按照一定规律采用对称加密算法生成token,虽然 阅读全文
摘要:
一. 常见的安全隐患 1. SQL注入 常见的案例: 这个时候,只需要在传递过来的userID后面加上个: or 1=1,即可以获取T_User表中的所有数据了。 解决方案:参数化查询。 2. 跨站脚本攻击(Cross-Site Scripting (XSS)) 允许跨站脚本是Web 2.0时代网站 阅读全文
摘要:
一. IOC和DI 1. 通过Nuget引入Unity程序集。 PS:【版本:5.8.6】 2. 新建DIFactory类,用来读取Unity的配置文件并创建Unity容器,需要注意的是DIFactory类需要声明成单例。 PS:这里采用静态构造函数(必须是无参的)的形式来实现单例,MVC框架的那个 阅读全文
摘要:
一. 简单说明 开篇就介绍过WebApi和MVC相比,其中优势之一就是WebApi可以不依赖于IIS部署,可以自托管,当然这里指的是 .Net FrameWork 下的 WebApi 和 MVC 相比较,在.Net Core下,当然就另行别论。 下面我们重点介绍的就是WebApi基于控制台程序进行部 阅读全文
摘要:
一. 基本说明 1. 简介: WebApi下的过滤器和MVC下的过滤器有一些区别,首先我们要注意的是通常建WebApi项目时,会自动把MVC的程序集也引入进来,所以我们在使用WebApi下的过滤器的时候,要引入“ System.Web.Http”这个程序集,而不是MVC的“System.Web.MV 阅读全文
摘要:
一. 简介 前言: 跨域问题发生在Javascript发起Ajax调用,其根本原因是因为浏览器对于这种请求,所给予的权限是较低的,通常只允许调用本域中的资源, 除非目标服务器明确地告知它允许跨域调用。假设我们页面或者应用已在 http://www.test1.com 上了,而我们打算从 http:/ 阅读全文
摘要:
一. 前言 前端调用有Form表单提交,ajax提交,ajax一般是用Jquery的简化写法,在这里不再过多介绍; 后端调用大约有这些:WebCient、WebRequest、Httpclient、WebapiClient,重点探讨Get和Post请求,Put和Delete请求用较少。 下面排着介绍 阅读全文
摘要:
一. 基本调用规则 1. 前提 WebApi的默认路由规则为:routeTemplate: "api/{controller}/{id}", 下面为我们统一将它改为 routeTemplate: "api/{controller}/{action}/{id}",这样我们在调用的时候,还是通过拼接方法 阅读全文
摘要:
一. 原生态接口 1. 从默认路由开始分析 在WebApiConfig.cs类中的Register方法中,我们可以看到默认路由如下: 分析:请求地址在 controller 前面需要加上 api/,controller后面没有action,最后有一个参数{id},webapi默认的路由规则就是一种R 阅读全文
摘要:
一. 简介 1. 什么是WebApi? WebApi是一个很广泛的概念,在这里我们特指.Net平台下的Asp.Net WebApi框架,它是针对各种客户端(浏览器、APP等)来构建Http服务的一个框架,它是一种RestFul风格的开发接口的技术,它比WebService更省流量,比WCF更简单。下 阅读全文
摘要:
阅读全文
摘要:
一. 前言 本节继续探讨一种新的框架搭建模式,框架的结构划分和上一节是相同的,本节IOC框架换成了Unity,并且采用构造函数注入的方式,另外服务层的封装模式也发生了变化,下面将详细的进行探讨。 (一). 技术选型 1. DotNet框架:4.6 2. 数据库访问:EF 6.2 (CodeFrist 阅读全文
摘要:
一. 前言 从本节开始,将陆续的介绍几种框架搭建组合形式,分析每种搭建形式的优势和弊端,剖析搭建过程中涉及到的一些思想和技巧。 (一). 技术选型 1. DotNet框架:4.6 2. 数据库访问:EF 6.2 (CodeFrist模式) 3. IOC框架:AutoFac 4.8.1 和 AutoF 阅读全文
摘要:
一. 基本概念 1.共享锁:(holdlock) (1). select的时候会自动加上共享锁,该条语句执行完,共享锁立即释放,与事务是否提交没有关系。 (2). 显式通过添加(holdlock)来显式添加共享锁(比如给select语句显式添加共享锁),当在事务里的时候,需要事务结束,该共享锁才能释 阅读全文
摘要:
一. 前言 抛砖引玉: 提到项目性能优化,大部分人第一时间就会想到缓存,针对“读多写少”的数据,可以放到缓存里,设置个过期时间,这样就不用每次都去数据库中查询了, 减轻了数据库的压力,比如:商城项目的物品分类目录,不会经常变化,就可以放到缓存里。 详细分析:缓存的引入减轻了数据库的压力,但还是要访问 阅读全文
摘要:
一. 前言 沉寂了约一个月的时间,今天用一篇简单的文章重新回归博客,主要来探讨一下Fluent Api模式在实际项目中的使用流程。 1. Fluent API属于EF CodeFirst模式的一种,EF还有一种模式是DataAnnotations,两种模式各有千秋吧,前面的EF系列已经详细介绍过他们 阅读全文
摘要:
一. 简介 (一). 在处理并发的这个问题上,锁大致分为两类:悲观锁和乐观锁。 1. 悲观锁:悲观的认为每次去拿数据的时候都会被别人修改,所以每次在拿数据的时候都会“上锁”,操作完成之后再“解锁”。 在数据加锁期间,其他人(其他线程)如果来拿数据就会等待,直到去掉锁。数据库层次的悲观锁有“表锁”、“ 阅读全文
摘要:
一. 基本介绍 1. 背景:Asp.Net默认的Session机制是进程内,存储在服务器端内存中,有这么几个缺点: ①:既然存在内存中,空间有限,不能存储大数据量信息,数据量多的话Session会被挤爆。 ②:IIS只要一重启,Session就会丢失,哪怕就是改一下配置文件,IIS也会重启,此时如果 阅读全文
摘要:
一. 背景 在MVC框架中,我们可能经常会用到 return Json(),而Json方法内部又是一个JsonResult类,那么JsonResult内部又是什么原理呢?在MVC框架中,各种xxxResult便捷了我们的开发,但这些都不是本节的重点,在这里我们只需要知道JsonResult内部的原理 阅读全文
摘要:
一. 说在前面的话 凡是大约工作在两年以上的朋友们,或多或少都会接触到一些框架搭建方面的知识,只要一谈到框架搭建这个问题或者最佳用法这个问题,势必会引起一点点小小的风波,我说我的好,他说他的好,非常容易骂架,所以在本节乃至该系列我仅仅是总结了一下自己日常中的一些用法,谈一下自己浅陋的见解,谈不上最佳 阅读全文
摘要:
一. Log4Net简介 Log4net是从Java中的Log4j迁移过来的一个.Net版的开源日志框架,它的功能很强大,可以将日志分为不同的等级,以不同的格式输出到不同的存储介质中,比如:数据库、txt文件、内存缓冲区、邮件、控制台、ANSI终端、远程接收端等等,我们这里主要介绍最常用的两种:tx 阅读全文
摘要:
一. SignalR中DI思想的应用 DI,即依赖注入,它是一种不负责创建其自己的依赖项对象的一种模式,通常用来降低代码之间的耦合性,广泛应用于架构设计,是必不可少的一种思想。 下面结合一个需求来说一说SignalR中依赖注入思想的应用。 需求:比如在前面章节的聊天室案例中,想把发送的每条消息都记录 阅读全文
摘要:
一. 简单说几句 最早使用SignalR的时候大约是两年前了,记得当时是一个OA中消息的实时提醒,轮询的方式有点耗资源,WebSocket写起来又比较麻烦,最终选择了SignalR,当时是什么版本已经记不清了,反正现在最新的是2.3.0(这里指 .Net FrameWork下,而非Core下),这期 阅读全文
摘要:
一. 说在前面的话 本节主要在前面章节的基础上补充了几个简单的知识点,比如:第三方调用通过 GlobalHost.ConnectionManager.GetHubContext<MySpecHub1>();来获取Hub对象,那么能不能封装一下不必每次都这么获取呢?再比如SignalR传输是否有大小限 阅读全文
摘要:
一. 整体介绍 本节:开始介绍SignalR另外一种通讯模型Hub(中心模型,或者叫集线器模型),它是一种RPC模式,允许客户端和服务器端各自自定义方法并且相互调用,对开发者来说相当友好。 该节包括的内容有: ①:从零搭建 ②:Hub模型和URL匹配,默认模式和指定路径 ③:服务器端代码介绍 ④:客 阅读全文
摘要:
一. 承上声明 在上一个章节里,啰里啰嗦写了一堆关于介绍SignalR的“废话”,从这一篇开始往后正式撸代码,这期间不少人(包括 张善友大哥)建议我直接用.Net Core下的SignalR,关于此简单说一下,虽然我们要跟上时代步伐,但目前绝多数.Net项目都是基于 .Net FrameWork下的 阅读全文