设为首页 加入收藏

TOP

一步步完成“迷你版” 的ASP.NET Core框架(四)
2019-09-17 18:23:56 】 浏览:94
Tags:步步 完成 迷你 ASP.NET Core 框架
Builder Configure(Action<IApplicationBuilder> configure); IWebHost Build(); } public class WebHostBuilder : IWebHostBuilder { private readonly List<Action<IApplicationBuilder>> _configures = new List<Action<IApplicationBuilder>>(); private IServer _server; public IWebHost Build() { //所有的中间件都注册在builder上 var builder = new ApplicationBuilder(); foreach (var config in _configures) { config(builder); } return new WebHost(_server, builder.Build()); } public IWebHostBuilder Configure(Action<IApplicationBuilder> configure) { _configures.Add(configure); return this; } public IWebHostBuilder UseServer(IServer server) { _server = server; return this; } }

给IWebHostBuilder加一个扩展方法,用来使用HttpListenerServer 服务器

    public static partial class Extensions
    {
        public static IWebHostBuilder UseHttpListener(this IWebHostBuilder builder, params string[] urls)
        {
            return builder.UseServer(new HttpListenerServer(urls));
        }
    }

修改Mian方法

        static async Task Main(string[] args)
        {
            await new WebHostBuilder()
                .UseHttpListener()
                .Configure(app=>
                app.Use(FooMiddleware)
                .Use(BarMiddleware)
                .Use(BazMiddleware))
                .Build()
                .StartAsync();              

        }

完成。

七 添加一个UseMiddleware 扩展 玩玩

        public static IApplicationBuilder UseMiddleware(this IApplicationBuilder application, Type type)
        {
            //省略实现
        }

        public static IApplicationBuilder UseMiddleware<T>(this IApplicationBuilder application) where T : class
        {
            return application.UseMiddleware(typeof(T));
        }

添加一个中间件

    public class QuxMiddleware
    {
        private readonly RequestDelegate _next;

        public QuxMiddleware(RequestDelegate next)
        {
            _next = next;
        }

        public async Task InvokeAsync(HttpContext context)
        {

           await context.Response.WriteAsync("qux=>");

            await _next(context);
        }
    }
    public static partial class Extensions
    {
        public static IApplicationBuilder UseQux(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<QuxMiddleware>();
        }
    }

使用中间件

    class Program
    {
        static async Task Main(string[] args)
        {
            await new WebHostBuilder()
                .UseHttpListener()
                .Configure(app=>
                app.Use(FooMiddleware)
                .Use(BarMiddleware)
                .Use(BazMiddleware)
                .UseQux())
                .Build()
                .StartAsync();              

        }

运行结果

最后,期待Artech 新书。

首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C# 中类的成员有哪些? 下一篇dotnet core 之 CORS使用示例

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目