[理解ASP.NET Core框架]一个五十行的控制台Web
在阅读了Artech的ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程之后, 自己做了一个"迷你版"中的"迷你版", 对于理解中间件和HttpServer之间的关系很有帮助, 现在贴出代码如下:
/// 使用控制台实现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, 0, 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, 0, buffer.Length);
return next(context);
};
};
var task = middleware1(middleware2(cc => Task.Delay(1)))(c);
task.Wait();
c.Response.Close(); // 将响应发送給客户端, 释放response的资源
listener.Stop(); // 使实例停止接收客户端请求
}
}
![](/assets/blank.gif)
运行以后直接在浏览器输入localhost:6688即可, GitHub地址为: https://github.com/HeabKing/DotNetCoreStudy
转载于:https://www.cnblogs.com/HeabKing/p/5577970.html
[理解ASP.NET Core框架]一个五十行的控制台Web相关推荐
- 大内老A:200行代码,7个对象——让你了解ASP.NET Core框架的本质
来源 | https://www.cnblogs.com/artech/p/inside-asp-net-core-framework.html 2019年1月19日,微软技术(苏州)俱乐部成立,我受 ...
- 一个迷你ASP.NET Core框架的实现(下)
[框架内幕]| 作者 / Edison Zhou 这是恰童鞋骚年的第196篇原创文章 上一篇我们了解了AspNetCore.Mini这个项目的背景及项目结构和流程,这一篇我们继续解析几个核心对象.本文 ...
- ASP.NET Core 框架本质学习
本文作为学习过程中的一个记录. 学习文章地址: https://www.cnblogs.com/artech/p/inside-asp-net-core-framework.html 一. ASP.N ...
- asp服务器_200行代码,7个对象——让你了解ASP.NET Core框架的本质「3.x版」
2019年1月19日,微软技术(苏州)俱乐部成立,我受邀在成立大会上作了一个名为<ASP.NET Core框架揭秘>的分享.在此次分享中,我按照ASP.NET Core自身的运行原理和设计 ...
- 200行代码,7个对象——让你了解ASP.NET Core框架的本质[3.x版]
2019年1月19日,微软技术(苏州)俱乐部成立,我受邀在成立大会上作了一个名为<ASP.NET Core框架揭秘>的分享.在此次分享中,我按照ASP.NET Core自身的运行原理和设计 ...
- 蒋金楠:200行代码7个对象《ASP.NET Core框架揭密》苏州.NET俱乐部课程分享
[课程名称] <ASP.NET Core框架揭密> [老师介绍] 蒋金楠,同程艺龙机票事业部技术专家,微软最有价值专家(MVP,连续12),多本.NET专著作者.博客园Artech,公众号 ...
- spring web请求statuscode = 200 无响应值_200行代码,7个对象——让你了解ASP.NET Core框架的本质[3.x版]...
2019年1月19日,微软技术(苏州)俱乐部成立,我受邀在成立大会上作了一个名为<ASP.NET Core框架揭秘>的分享.在此次分享中,我按照ASP.NET Core自身的运行原理和设计 ...
- 一步步完成“迷你版” 的ASP.NET Core框架
一 前言 Artech 分享了 200行代码,7个对象--让你了解ASP.NET Core框架的本质 . 用一个极简的模拟框架阐述了ASP.NET Core框架最为核心的部分. 这里一步步来完成这个迷 ...
- npm——安装教程、安装vue脚手架(ASP.NET Core微服务(五)——【vue脚手架解析接口】过度章节)
npm:是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题. 比如常用的有: 1)允许用户从NPM服务器下载别人编写的第三方包到本地使用. 2)允许用户从NPM服务器下载并 ...
- 理解ASP.NET Core中的中间件
中间件是ASP.NET Core的一个重要特点,ASP.NET Core应用程序之所以能够灵活地处理各种各样的请求,完成都是由于中间件,那么它究竟是怎么一回事呢? 一.理解中间件 ASP.NET Co ...
最新文章
- 【模型蒸馏】从入门到放弃:深度学习中的模型蒸馏技术
- SQL基础---SQL WHERE 子句
- 就业技术书文件表格_Word格式:工程预结算工作流程图及工作表单,附20余表格...
- E打开https网站时,提示此网站的安全证书有问题(证书无效)
- 如何以10倍速加速Apache Xalan的XPath处理器
- Linux删除所有文件(作死命令,危险命令)
- java filter加时间戳_java filter加时间戳
- 怎么把GMS的软件转到HMS?
- 万物的解释 —— 微波炉的工作原理
- Web安全防御从WAF到应用网关
- 根据ip地址制作html,根据ip掩码计算可用ip
- 第一章 数学建模与误差分析
- 分布式系统有哪些衡量指标?
- Windows server DHCP服务器搭建
- JS如何删除节点和所有子节点
- SuperMap瓦片技术方案
- 【论文精读】Robust Alignment for Panoramic Stitching Via an Exact Rank Constraint
- 摄像机投影成像 matlab,使用matlab仿真三维物点的透视投影成像.doc
- 群发短信平台哪个好?推荐阿里云短信平台
- vscode背景图片设置分享