(精华)2020年9月17日 ASP.NET Core 中间件详解
发布日期:2021-06-29 15:12:32 浏览次数:3 分类:技术文章

本文共 8514 字,大约阅读时间需要 28 分钟。

1.基本中间件的使用

public static void Start(){
var host = Host.CreateDefaultBuilder() .ConfigureWebHost(builder => builder .UseKestrel() .Configure(app => app.Run(context => context.Response.WriteAsync("Hello!")) ) ).Build(); host.Run();}
public static class Sample02{
public static void Start() {
var host = Host.CreateDefaultBuilder() .ConfigureWebHostDefaults(builder => builder .Configure(app => app .Use(Middleware1) .Use(Middleware2) ) ).Build(); host.Run(); } private static RequestDelegate Middleware1(RequestDelegate next) {
async Task App(HttpContext context) {
await context.Response.WriteAsync("Middleware 1 Begin."); await next(context); await context.Response.WriteAsync("Middleware 1 End."); } return App; } private static RequestDelegate Middleware2(RequestDelegate next) {
async Task App(HttpContext context) {
await context.Response.WriteAsync("Middleware 2 Begin."); } return App; }}

2.强类型中间件的使用

public class Sample03{
public class HelloMiddleware : IMiddleware {
public async Task InvokeAsync(HttpContext context, RequestDelegate next) {
await context.Response.WriteAsync("Hello"); } } public static void Start() {
var host = Host.CreateDefaultBuilder() .ConfigureWebHostDefaults(builder => builder .ConfigureServices(collection => collection.AddSingleton
()) .Configure(app => app .UseMiddleware
() ) ).Build(); host.Run(); }}

3.约定中间件的使用

public class Sample04{
public class HelloMiddleware {
private readonly RequestDelegate _next; private readonly string _content; private readonly bool _isToNext; public HelloMiddleware(RequestDelegate next, string content, bool isToNext = false) {
_next = next; _content = content; _isToNext = isToNext; } public async Task InvokeAsync(HttpContext httpContext) {
await httpContext.Response.WriteAsync($"Hello {_content}!\r\n"); if (_isToNext) await _next(httpContext); } } public static void Start() {
var host = Host.CreateDefaultBuilder() .ConfigureWebHostDefaults(builder => builder .Configure(app => app .UseMiddleware
("Rick", true) .UseMiddleware
("Motry") ) ).Build(); host.Run(); }}

4.Startup的由来和使用

public static class Sample06    {
public class Startup {
public void ConfigureServices(IServiceCollection services) {
foreach (var service in services) {
var serviceName = service.ServiceType.Name; var implType = service.ImplementationType; if (implType != null) {
Console.WriteLine($"{service.Lifetime, -15}{serviceName,-40}{implType.Name}"); } } } public void Configure(IApplicationBuilder app) {
} } public static void Start() {
var host = Host.CreateDefaultBuilder() .ConfigureWebHostDefaults(builder => builder .UseStartup
()) .Build(); host.Run(); } }
public class Sample07    {
public class Startup {
public Startup(IConfiguration configuration, IHostEnvironment hostingEnvironment) {
Debug.Assert(configuration != null); Debug.Assert(hostingEnvironment != null); } public void ConfigureServices(IServiceCollection services) {
} public void Configure(IApplicationBuilder app) {
} } public static void Start() {
var host = Host.CreateDefaultBuilder() .ConfigureWebHostDefaults(builder => builder .UseStartup
()) .Build(); host.Run(); } }
public class Sample09    {
public class Test1{
}; public class Test2{
}; public class TestMiddleware {
private readonly RequestDelegate _next; public TestMiddleware(RequestDelegate next, Test1 test1, Test2 test2) {
Debug.Assert(test1 != null); Debug.Assert(test2 != null); _next = next; } public async Task InvokeAsync(HttpContext httpContext) {
Debug.Assert(_next != null); await httpContext.Response.WriteAsync("Test"); } } public class Startup {
public void ConfigureServices(IServiceCollection services) {
services .AddSingleton
() .AddSingleton
(); } public void Configure(IApplicationBuilder app) {
app.UseMiddleware
(); } } public static void Start() {
var host = Host.CreateDefaultBuilder() .ConfigureWebHostDefaults(builder => builder .UseStartup
()) .Build(); host.Run(); } }
public class Sample10    {
public class Test1{
}; public class Test2{
}; public class TestMiddleware {
private readonly RequestDelegate _next; public TestMiddleware(RequestDelegate next) {
_next = next; } public async Task InvokeAsync(HttpContext httpContext,Test1 test1, Test2 test2) {
Debug.Assert(test1 != null); Debug.Assert(test2 != null); await httpContext.Response.WriteAsync("Test"); } } public class Startup {
public void ConfigureServices(IServiceCollection services) {
services .AddSingleton
() .AddSingleton
(); } public void Configure(IApplicationBuilder app) {
app.UseMiddleware
(); } } public static void Start() {
var host = Host.CreateDefaultBuilder() .ConfigureWebHostDefaults(builder => builder .UseStartup
()) .Build(); host.Run(); } }
public class Sample11    {
public class Test1{
} public class Test2{
} public static void Start() {
var host = Host.CreateDefaultBuilder() .ConfigureWebHostDefaults(builder => builder .ConfigureServices(collection => collection .AddSingleton
() .AddSingleton
() .AddControllersWithViews()) .Configure(app=>app .UseRouting() .UseEndpoints(routeBuilder => routeBuilder.MapControllers())) ) .Build(); host.Run(); } } public class Startup {
public void Configure(IApplicationBuilder app) {
} public void ConfigureServices(IServiceCollection services) {
} } public class HomeController : Controller {
private readonly Sample11.Test1 _test1; public HomeController(Sample11.Test1 test1) {
_test1 = test1; } [HttpGet("/")] public IActionResult Index() {
ViewBag.Test1 = _test1; return View(); } }

转载地址:https://codeboy.blog.csdn.net/article/details/108524678 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:(精华)2020年12月23日 .NET Core 多线程底层详解(信号量)
下一篇:(精华)2020年9月18日 ASP.NET Core 静态文件详解

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月20日 12时29分20秒