[理解ASP.NET Core框架]一个五十行的控制台Web
在阅读了Artech的ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程之后, 自己做了一个"迷你版"中的"迷你版", 对于理解中间件和HttpServer之间的关系很有帮助, 现在贴出代码如下:
/// <summary>
/// 使用控制台实现WebAppi - 简单版 - 目标: 实现一个监听 Http 的 Server, 一个连续的 Middleware
/// </summary>
public class Program
{
/// <summary>
/// 服务集合的容器: 服务类别1. 监听 Http 的 Server 服务类别2. 中间件集合
/// </summary>
/// <param name="args"></param>
public static void Main(string[] args)
{
// 用于监听Http
var listener = new HttpListener();
listener.Prefixes.Add("http://localhost:6688/");
listener.Start();
// 用于访问HttpListener的HttpRequest和HttpResponse
HttpListenerContext c = listener.GetContext(); // 定义一个中间件
Func<Func<HttpListenerContext, Task>, Func<HttpListenerContext, Task>> middleware1 = next =>
{
return context =>
{
string content = "<html><body><h1>Hello World!</h1></body></html>";
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(content);
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
//c.Response.ContentLength64 = buffer.Length; // 这里赋值的话会出的问题: 1. 一旦填充到指定的长度, 立即将response响应, 释放资源 2. 如果最终都没有到达指定的长度, 不允许释放response, 抛出异常 // 所以, 不赋值, 让他最终自动生成就行了
context.Response.ContentType = "text/html";
context.Response.OutputStream.Write(buffer, , buffer.Length);
return next(context);
};
}; // 定义另一个中间件
Func<Func<HttpListenerContext, Task>, Func<HttpListenerContext, Task>> middleware2 = next =>
{
return context =>
{
string content = "<script>alert('Hello World')</script>";
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(content);
c.Response.OutputStream.Write(buffer, , buffer.Length);
return next(context);
};
};
var task = middleware1(middleware2(cc => Task.Delay()))(c);
task.Wait();
c.Response.Close(); // 将响应发送給客户端, 释放response的资源
listener.Stop(); // 使实例停止接收客户端请求
}
}

运行以后直接在浏览器输入localhost:6688即可, GitHub地址为: https://github.com/HeabKing/DotNetCoreStudy
[理解ASP.NET Core框架]一个五十行的控制台Web的更多相关文章
- 200行代码,7个对象——让你了解ASP.NET Core框架的本质
2019年1月19日,微软技术(苏州)俱乐部成立,我受邀在成立大会上作了一个名为<ASP.NET Core框架揭秘>的分享.在此次分享中,我按照ASP.NET Core自身的运行原理和设计 ...
- 了解ASP.NET Core框架的本质
了解ASP.NET Core框架的本质 ASP.NET Core自身的运行原理和设计思想创建了一个 “迷你版” 的ASP.NET Core框架,并且利用这个 “极简” 的模拟框架阐述了ASP.NET ...
- 200行代码,7个对象——让你了解ASP.NET Core框架的本质
原文:200行代码,7个对象--让你了解ASP.NET Core框架的本质 2019年1月19日,微软技术(苏州)俱乐部成立,我受邀在成立大会上作了一个名为<ASP.NET Core框架揭秘&g ...
- ASP.NET Core框架的本质
源文章地址:http://www.cnblogs.com/artech/p/inside-asp-net-core-framework.html 1.从Hello World谈起 当我们最开始学习一门 ...
- ASP.NET Core框架深度学习(一) Hello World
对于学习Core的框架,对我帮助最大的一篇文章是Artech的<200行代码,7个对象——让你了解ASP.NET Core框架的本质>,最近我又重新阅读了一遍该文.本系列文章就是结合我的阅 ...
- WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化
WPF中的常用布局 一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...
- 一个Mini的ASP.NET Core框架的实现
一.ASP.NET Core Mini 在2019年1月的微软技术(苏州)俱乐部成立大会上,蒋金楠老师(大内老A)分享了一个名为“ASP.NET Core框架揭秘”的课程,他用不到200行的代码实现了 ...
- 用一个应用场景理解ASP.NET Core Identity是什么?
目录 前言 基于声明的认证(Claims-based Authentication) 应用场景一 在ASP.NET Core 中Identity是如何实现的 类ClaimsPrincipal 考察另外 ...
- ASP.NET Core 框架本质学习
本文作为学习过程中的一个记录. 学习文章地址: https://www.cnblogs.com/artech/p/inside-asp-net-core-framework.html 一. ASP.N ...
随机推荐
- 【转】MFC中用CFile读取和写入文件2
原文网址:http://blog.sina.com.cn/s/blog_623a7fa40100hh1u.html CFile提供了一些常用的操作函数,如表1-2所示. 表1-2 CFile操作函数 ...
- htmlparser 精确提取的一些代码
一. ConnectionManager manager = Page.getConnectionManager(); Parser parser = new Parser(manager .open ...
- 解决Dagger2和butterknife冲突
dagger2 和 RxJava butterknife 以及 Retrofit使用起来非常酸爽 代码非常干净清晰 动手尝试 配置编译 DaggerAppComponent的时候 出现问题 配置dag ...
- [转]用C#实现的条形码和二维码编码解码器
条形码的标准: 条形码的标准有ENA条形码.UPC条形码.二五条形码.交叉二五条形码.库德巴条形码.三九条形码和128条形码等,而商品上最常使用的就是EAN商品条形码.EAN商品条形码亦称通用商品条形 ...
- A better way to learn D3 js - iLearning D3.js
iLearning D3.js Basic is an iPad app to learn and code with D3. In 1.1 version, new tutorial is prov ...
- Docker系列(四)Dockerfile
基本语法 使用 #来注释 FROM 指令告诉Docker使用哪个镜像作为基础 接着是维护者信息 RUN 开头的指令会在创建中运行,比如安装软件包 FROM 格式: FROM<image>或 ...
- 【Java基础】static关键字的理解
修饰范围: 可以修饰成员变量和成员方法.静态的特点: A:随着类的加载而加载 B:优先于对象存在 C:被类的所有对象共享 这其实也是我们判断该不该使用静态的依据. 举例:饮水机和水杯的问题思考可通过类 ...
- ural 1748 The Most Complex Number 和 丑数
题目:http://acm.timus.ru/problem.aspx?space=1&num=1748 题意:求n范围内约数个数最多的那个数. Roughly speaking, for a ...
- 程序员需要掌握哪些IT技能
据Foote Partners的最新调查:如今,你掌握的 IT 技能的多少决定了你薪资的多少,但你不一定非要比开源架构师或Certified Secure Software Life Cycle Pr ...
- 100个常用的linux命令
1,echo “aa” > test.txt 和 echo “bb” >> test.txt //>将原文件清空,并且内容写入到文件中,>>将内容放到文件的尾部 2 ...