04 中间件.mp4 (94.51MB)

中间件

官方内置了很多种中间件:
image.png
使用中间件的常见形式:

  1. app.UseWelcomePage(new WelcomePageOptions
  2. {
  3. Path = "/welcome"
  4. });

中间件执行顺序:

  1. app.Use(next =>
  2. {
  3. // 只允许一次
  4. logger.LogInformation("app.Use()...");
  5. // 每次请求都会运行的中间件代码
  6. return async httpContext =>
  7. {
  8. logger.LogInformation("--- async httpContext");
  9. if (httpContext.Request.Path.StartsWithSegments("/first"))
  10. {
  11. logger.LogInformation("--- First!!!!");
  12. await httpContext.Response.WriteAsync("First!!!");
  13. }
  14. else
  15. {
  16. logger.LogInformation("--- next(httpContext)");
  17. await next(httpContext);
  18. }
  19. };
  20. });

UseDeveloperExceptionPage:开发者异常页面中间件,用于捕获在它之后的中间件中抛出的未处理异常。

  1. if (env.IsDevelopment())
  2. {
  3. app.UseDeveloperExceptionPage();
  4. }

Environment

内置的三种环境值:

  • Development:开发环境
  • Production:生产环境
  • Staging:预览(演示)环境

环境值默认从 launchSettings.json 文件中获取:

  1. {
  2. "iisSettings": {
  3. "windowsAuthentication": false,
  4. "anonymousAuthentication": true,
  5. "iisExpress": {
  6. "applicationUrl": "http://localhost:63605",
  7. "sslPort": 0
  8. }
  9. },
  10. "profiles": {
  11. // IIS 启动配置
  12. "IIS Express": {
  13. "commandName": "IISExpress",
  14. "launchBrowser": true,
  15. "environmentVariables": {
  16. "ASPNETCORE_ENVIRONMENT": "Development"
  17. }
  18. },
  19. // 命令行启动配置
  20. "Tutorial.Web": {
  21. "commandName": "Project",
  22. "launchBrowser": true,
  23. "applicationUrl": "http://localhost:5000",
  24. "environmentVariables": {
  25. "ASPNETCORE_ENVIRONMENT": "Development"
  26. }
  27. }
  28. }
  29. }

文件伺服

通过 app.UseStaticFiles(); 伺服静态文件后才能访问 index.html 等静态文件。

也可以使用 app.UserFileServer(); 它将 Enable all static file middleware (except directory browsing) for the current request path in the current directory.

源码

Tutorial.zip