zoukankan      html  css  js  c++  java
  • DotNETCore 学习笔记 Startup、中间件、静态文件

    Application Startup
    
    Startup Constructor - IHostingEnvironment - ILoggerFactory
    
    ConfigureServices - IServiceCollection
    
    Configure - IApplicationBuilder - IHostingEnvironment - ILoggerFactory
    
    ----------------------------------------------------------------------------------------
    
    Middleware
    
    public void Configure(IApplicationBuilder app)
    {
        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello, World!");
        });
    
        --will not execute
        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello, World, Again!");
        });
    }
    
    public void ConfigureLogInline(IApplicationBuilder app, ILoggerFactory loggerfactory)
    {
        loggerfactory.AddConsole(minLevel: LogLevel.Information);
        var logger = loggerfactory.CreateLogger(_environment);
        app.Use(async (context, next) =>
        {
            logger.LogInformation("Handling request.");
            await next.Invoke();
            logger.LogInformation("Finished handling request.");
        });
    
        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello from " + _environment);
        });
    }
    
    Run:
    *********************************************************************************************
    The following two middleware are equivalent as the Use version doesn’t use the next parameter:
    public void ConfigureEnvironmentOne(IApplicationBuilder app)
    {
        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello from " + _environment);
        });
    }
    
    public void ConfigureEnvironmentTwo(IApplicationBuilder app)
    {
        app.Use(async (context, next) =>
        {
            await context.Response.WriteAsync("Hello from " + _environment);
        });
    }
    *********************************************************************************************
    Map:
    private static void HandleMapTest(IApplicationBuilder app)
    {
        app.Run(async context =>
        {
            await context.Response.WriteAsync("Map Test Successful");
        });
    }
    
    public void ConfigureMapping(IApplicationBuilder app)
    {
        app.Map("/maptest", HandleMapTest);
    
    }
    
    private static void HandleBranch(IApplicationBuilder app)
    {
        app.Run(async context =>
        {
            await context.Response.WriteAsync("Branch used.");
        });
    }
    
    public void ConfigureMapWhen(IApplicationBuilder app)
    {
        app.MapWhen(context => {
            return context.Request.Query.ContainsKey("branch");
        }, HandleBranch);
    
        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello from " + _environment);
        });
    }
    
    
    You can also nest Maps:
    
    app.Map("/level1", level1App => {
        level1App.Map("/level2a", level2AApp => {
            // "/level1/level2a"
            //...
        });
        level1App.Map("/level2b", level2BApp => {
            // "/level1/level2b"
            //...
        });
    });
    *********************************************************************************************
    
    public class RequestLoggerMiddleware
        {
            private readonly RequestDelegate _next;
            private readonly ILogger _logger;
    
            public RequestLoggerMiddleware(RequestDelegate next, ILoggerFactory loggerFactory)
            {
                _next = next;
                _logger = loggerFactory.CreateLogger<RequestLoggerMiddleware>();
            }
    
            public async Task Invoke(HttpContext context)
            {
                _logger.LogInformation("Handling request: " + context.Request.Path);
                await _next.Invoke(context);
                _logger.LogInformation("Finished handling request.");
            }
        }
    public static class RequestLoggerExtensions
    {
        public static IApplicationBuilder UseRequestLogger(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<RequestLoggerMiddleware>();
        }
    }
    public void ConfigureLogMiddleware(IApplicationBuilder app,
        ILoggerFactory loggerfactory)
    {
        loggerfactory.AddConsole(minLevel: LogLevel.Information);
    
        app.UseRequestLogger();
    
        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello from " + _environment);
        });
    }
    -------------------------------------------------------------------------------------------------------
    
    Working with Static Files
    
    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();
    
        host.Run();
    }
    
    //*http://<app>/StaticFiles/test.png*//
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        app.UseStaticFiles();
    
        app.UseStaticFiles(new StaticFileOptions()
        {
            FileProvider = new PhysicalFileProvider(
                Path.Combine(Directory.GetCurrentDirectory(), @"MyStaticFiles")),
            RequestPath = new PathString("/StaticFiles")
        });
    
    
        -----------Enabling directory browsing--------------------
        app.UseStaticFiles(new StaticFileOptions()
        {
            FileProvider = new PhysicalFileProvider(
                Path.Combine(Directory.GetCurrentDirectory(), @"wwwrootimages")),
            RequestPath = new PathString("/MyImages")
        });
    
        app.UseDirectoryBrowser(new DirectoryBrowserOptions()
        {
            FileProvider = new PhysicalFileProvider(
                Path.Combine(Directory.GetCurrentDirectory(), @"wwwrootimages")),
            RequestPath = new PathString("/MyImages")
        });
        -----------Enabling directory browsing--------------------
    
    }
    
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDirectoryBrowser();
    }
    
    -------Serving a default document-----------
    public void Configure(IApplicationBuilder app)
    {
        app.UseDefaultFiles();
        app.UseStaticFiles();
    }
    
    public void Configure(IApplicationBuilder app)
    {
        // Serve my app-specific default file, if present.
        DefaultFilesOptions options = new DefaultFilesOptions();
        options.DefaultFileNames.Clear();
        options.DefaultFileNames.Add("mydefault.html");
        app.UseDefaultFiles(options);
        app.UseStaticFiles();
    }
    ******************************************************************************************************
    
    UseFileServer:combines the functionality of UseStaticFiles, UseDefaultFiles, and UseDirectoryBrowser.
    
    app.UseFileServer(enableDirectoryBrowsing: true);
    
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        app.UseStaticFiles();
    
        app.UseFileServer(new FileServerOptions()
        {
            FileProvider = new PhysicalFileProvider(
                Path.Combine(Directory.GetCurrentDirectory(), @"MyStaticFiles")),
            RequestPath = new PathString("/StaticFiles"),
            EnableDirectoryBrowsing = true
        });
    }
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDirectoryBrowser();
    }
    
    http://<app>/StaticFiles/test.png     MyStaticFiles/test.png 
    http://<app>/StaticFiles          MyStaticFiles/default.html 
    
    *****************************************************************************************************
    
    FileExtensionContentTypeProvider:
    
    public void Configure(IApplicationBuilder app)
    {
        // Set up custom content types -associating file extension to MIME type
        var provider = new FileExtensionContentTypeProvider();
        // Add new mappings
        provider.Mappings[".myapp"] = "application/x-msdownload";
        provider.Mappings[".htm3"] = "text/html";
        provider.Mappings[".image"] = "image/png";
        // Replace an existing mapping
        provider.Mappings[".rtf"] = "application/x-msdownload";
        // Remove MP4 videos.
        provider.Mappings.Remove(".mp4");
    
        app.UseStaticFiles(new StaticFileOptions()
        {
            FileProvider = new PhysicalFileProvider(
                Path.Combine(Directory.GetCurrentDirectory(), @"wwwrootimages")),
            RequestPath = new PathString("/MyImages"),
            ContentTypeProvider = provider
        });
    
        app.UseDirectoryBrowser(new DirectoryBrowserOptions()
        {
            FileProvider = new PhysicalFileProvider(
                Path.Combine(Directory.GetCurrentDirectory(), @"wwwrootimages")),
            RequestPath = new PathString("/MyImages")
        });
    }
    
    Non-standard content types:
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        app.UseStaticFiles(new StaticFileOptions
        {
            ServeUnknownFileTypes = true,
            DefaultContentType = "image/png"
        });
    }
  • 相关阅读:
    禁止ios10双指缩放
    使用uglifyjs压缩JS
    数组深拷贝的方法
    websocket具体如何使用
    订单支付倒计时-剩余时间xx小时xx分xx秒
    css--内凹圆角
    jQuery 演变史
    手机新闻网页
    [译文]此像素非彼像素,非彼像素
    函数有一个特殊的属性 prototype!
  • 原文地址:https://www.cnblogs.com/ziranquliu/p/5871044.html
Copyright © 2011-2022 走看看