搭建好了基于 OWIN 的 OAuth2 服务器之后, 接下来就是如何从服务器取得授权了, 下面就介绍如何实现 OAuth2 定义的四种授权方式。 授权码授权 (Authorization Code Grant) 授权码授权针对机密的客户端优化, 可以同时获取访问凭据 (access token) 和刷新凭据 (refresh token) , 因为是基于 HTTP 重定向的方式, 所以客户端必须能够操纵资源所有者的用户代理(通常是浏览器)并且能够接收从授权服务器重定向过来的请求。 在实现上使用开源的 DotNetOpenAuth 来简化实现代码, DotNetOpenAuth... 阅读全文

关于 OAuth 维基百科中对 OAuth 的描述如下: OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。 OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容。 很多知名网站都采用支持... 阅读全文

关于代码映射 NHibernate 3.2 自带了代码映射机制, 作为 xml 映射之外的一种映射方式, 由于推出的时间比较晚, 所以资料相对比较少, 而且与社区版的 Fluent Mapping 和 Attribute Mapping 不同, 有其独特的设计风格。 下面就通过一个实例来说明怎么使用 NHibernate 自带的代码映射。 实体关系 要映射的类关系图如下: 上图中有三个实体类, 他们之间的关系说明如下: Product 与 Store 之间是多对多关系; Store 与 Employee 之间是一对多关系; Employee 与 Store ... 阅读全文

Web API 的依赖注入 Web API 定义了依赖注入的接口 IDependencyResolver , 定义如下: public interface IDependencyResolver : IDependencyScope, IDisposable { IDependencyScope BeginScope(); } public interface IDependencyScope : IDisposable { object GetService(Type serviceType); IEnumerable<object> GetSe... 阅读全文

多视图应用 AngularJS 通过路由支持多视图应用, 可以根据路由动态加载所需的视图, 在 AngularJS 的文档中有详细的介绍, 网上也有不少教程, 就不用介绍了! 随着视图的不断增加, js文件 会越来越多, 而 AngularJS 默认需要把全部的 js 都一次性加载, 使用起来非常不便, 因此按需加载模块的需求会越来越强, 不过, AngularJS 并没有实现按需加载。 异步加载 关于异步加载, AngularJS 的开发指南中有这样一段话: Modules are a way of managing $injector configuration, ... 阅读全文

AngularJS 目前的版本没有遵循 Javascript 约定的 AMD 模块化规范, 因此使用 RequireJS 加载 AngularJS 时需要一些额外的配置。 通过查阅 RequireJS 的文档, RequireJS 通过配置可以支持支持动态加载没有遵循 AMD 规范的脚本, 接下来就看一下怎么配置: 先在页面引入 RequireJS 脚本, 这个很简单, 只要一个 script 标记: < script type="text/javascript" src="scripts/lib/require/require.js" data-main="scripts/... 阅读全文

最近需要将一些命令行程序包装成后台服务, 本来可以用 .NET 完成, 不过又想尝试一下用 C 语言实 现 Windows 服务, 发现用 C 语言做 Windows 服务也是很容易的, 步骤如下: 1 包含必要的头文件, 并定义一些常量, 代码如下: #include <windows.h> #include <stdio.h> // 服务线程暂停时间; #define SLEEP_TIME 5000 // 日志文件输入路径 #define LOGFILE "C:\\memstatus.txt" 2 写日志文件, 几乎所有的服务都有日志输出, 即使是最... 阅读全文

在二叉查找树的最后提到, 二叉树最终的形状如下图所示: 实际上,为了避免二叉树形状向最坏情况靠拢, 通常会创建能够自平衡的 2-3 树。 而 红黑树 是 2-3 树比较简单的一种实现形式: 红黑树将用二叉树表示 2-3 树, 实现起来相对容易; 内部使用向左倾斜的链接表示第三个节点; 红黑树定义如下: 没有任意节点拥有两个红色链接; 从跟节点到末节点的黑色链接数目相等; 红色节点向左倾斜; 用红黑树来表示 2-3 树例子: 红黑树的节点定义 节点定义 在二叉查找树节点的基础上增加一个 Color 字段, 相关代码如下: // Co... 阅读全文

二叉查找树定义 二叉查找树 (Binary Search Tree) 是按照平衡顺序排列的二叉树, 也称二叉搜索树、 有序二叉树(ordered binary tree),排序二叉树(sorted binary tree)。 首先, 要符合二叉树的特性: 可以为空; 也可以拥有连个互不相交的子树, 即: 左子树和右子树。 平衡排序, 每个节点都有一个 key, 并且每个节点的 key 都符合: 大于左子树中所有节点的 key; 小于右子树所有节点的 key ; 二叉查找树节点必须包含四个字段: 一个 Key 和一个 Value ; ... 阅读全文

快速排序 (Quick Sort) 算法简介 快速排序是非常常用的排序方法, 采用分治法的策略将数组分成两个子数组, 基本 思路是: 从数组中取一个元素作为基准元素, 通常取数组的第一个或者最后一个元素; 分区, 即将数组中比基准元素小的元素放到基准元素的左边, 比基准元素大的元素放 到右边; 递归, 分别对比基准元素小的部分和比基准元素大的子数组用相同的方式进行排序; 递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归 下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素 摆到它最后的位置去。 ... 阅读全文

OWIN 请求处理函数 在 OWIN 的最底层, 处理请求的函数定义的委托签名如下: Func<IDictionary<string, object>, Task> 这个函数接受类型为 IDictionary<string, object> 的 OWIN 环境, 返回一个 Task 对象。 通常可以为这个函数起这样的别名: using AppFunc = Func< IDictionary<string, object>, // OWIN 环境 Task>; // 任务 于是,请求处理函数可以这样... 阅读全文

ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动 设备)的 HTTP 服务。 ASP.NET Web API 是一种用于在 .NET Framework 上构建 RESTful 应用程序的理想平台。 ASP.NET Web API 是 OWIN 兼容的, 因此可以在 OWIN 服务器上运行。 接下来使用 Xamarin Studio 创建一个 OWIN 兼容的 C# 类库, 也就是 OWIN 中定义的“应 用 (Application)” , 然后在不同的 OWIN 服务器/宿主上运行。 创建 OWIN 兼容的 Web API 类库 打... 阅读全文

本博客基于 Tabler CSS 框架, 采用 Jekyll 模板引擎, 使用 Markdown 语法编写。

博客源代码及文章内容采用 AS-IS 协议发布,转载时请 AS-IS 。