[理解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 ...
随机推荐
- memcached实例(enyim.com Memcached Client)
在上一篇文章,我们讲了,为什么要使用memched做为缓存服务器(没看的同学请点这里).下面让我们以memcached-1.2.1-win32版本的服务组件(安装后是以一个windows服务做daem ...
- 016专家视图测试脚本开发- Environment对象的使用;Msgbox和Print的区别
(1)读取Built-in 'file -> settings -> Enrionment -> variable type 为 Built-in os = Environment. ...
- Datatable转换成List实体对象列表 几个实例
一, /// <summary> /// 将Datatable转换为List集合 /// </summary> /// <typeparam name="T&q ...
- 【VLFeat】使用matlab版本计算HOG
下载 vlfeat-0.9.18 http://www.vlfeat.org cd D:\program\vlfeat-0.9.18\toolbox
- [洛谷2397]yyy loves Maths VI
题目背景 自动上次redbag用加法好好的刁难过了yyy同学以后,yyy十分愤怒.他还击给了redbag一题,但是这题他惊讶的发现自己居然也不会,所以只好找你 题目描述 他让redbag找众数他还特意 ...
- Extjs 4.x 得到form CheckBox的值
CheckBox(复选框)主要用来接收用户选择的选项 如图所示(请忽略UI的不好看): 该弹出窗口的主要代码如下: var win = new Ext.Window({ modal : true, t ...
- Python安装、配置
1.Python简介:Python在Linux.windows.Mac os等操作系统下都有相应的版本,不管在什么操作系统下,它都能够正常工作.除非使用平台相关功能,或特定平台的程序库,否则可以跨平台 ...
- 关键在封装并发出了帧-IP冲突也无所谓
最近有点走火入魔了!本文所用技术非标准,较真儿者慎入!! 一个局域网内,两台机器拥有同样的IP,可以吗? 这不就是IP地址冲突吗?当然不行! 可是要知道,如果搞点旁门左道,还是可以做到的! 首先要明白 ...
- [四]JFreeChart实践三之饼图
饼图pie 原理总结 1.准备好要显示的数据放入dataset 2.调用ChartFactory将dataset作为参数传递进去,生成chart 3.掉Servlet工具类将chart作为参数传入生成 ...
- JQuery简单实现锚点链接的平滑滚动
在平时的项目中,我们经常需要一些特效链接,如果使效果进一步加强,我们可以使点击锚点链接平滑滚动到锚点,下面就来给大家讲解下如何使用jQuery来实现. 一般使用锚点来跳转到页面指定位置的时候,会生 ...