• 这样入门asp.net core 之 静态文件


    本文章主要说明asp.net core中静态资源处理方案:

    一、静态文件服务

    首先明确contentRoot和webroot这两个概念

    • contentRoot:web的项目文件夹,其中包含webroot和其他bin等其他文件夹
    • webroot:webroot是站点文件夹,可用url访问的文件夹。默认为:"contentroot/wwwroot"
    • 实现代码如下
      Program中的代码
    public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory()) //设置contentroot
        .UseWebRoot("mywwwroot") //设置webroot
        .UseUrls("http://*:5000") //其他电脑可以用ip地址访问
        .Build();

         StartUp中的代码

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseStaticFiles();//开启静态文件访问
        //自定义静态文件访问
        app.UseStaticFiles(new StaticFileOptions(){
            FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "mystatic")),
            RequestPath = new PathString("/sam/static")
        });
         //配置mvc
        app.UseMvc(routers=>{
            routers.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
        });
    }

    效果图下图:
    image

    1.1 目录浏览

    实现代码如下:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {  
        app.UseDirectoryBrowser(new DirectoryBrowserOptions(){
            FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "Controllers")),
            RequestPath = new PathString("/controller")
        }); 
    }

    image

    1.2 默认文档

    app.UseDefaultFiles方法开启默认访问的配置,配置项用DefaultFilesOption类表示,代码如下:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {  
        //默认文件
        DefaultFilesOptions defaultFiles = new DefaultFilesOptions();
        defaultFiles.DefaultFileNames.Clear();
        defaultFiles.DefaultFileNames.Add("myindex.html");
        app.UseDefaultFiles(defaultFiles); 
        
        app.UseStaticFiles(); //开启静态文件访问
    }

    注意此配置一定要在所有Use之前,否则设置不生效

    1.3 UseFileServer

    UserFileServer包含了UseStaticFiles, UseDefaultFiles, UserDirectoryBrowser的功能

    app.UseFileServer(new FileServerOptions(){
        EnableDefaultFiles, //是否开启默认文档
        EnableDirectoryBrowsing, //是否开启目录浏览
        DefaultFilesOptions, //默认文件设置
        StaticFileOptions, //静态资源访问设置
        DirectoryBrowserOptions, //目录浏览设置
    });

    二、静态文件授权

    静态模块是不对文件进行权限检查的,包含wwwroot下的文件和文件夹。如果相进行权限控制,可以使用action返回一个FileResult来实现:

    private string basePath = Common.Uitls.HostingEnvironment.ContentRootPath;
    public FileResult Index(int id){
        if(id == 1){
            return new PhysicalFileResult(Path.Combine(basePath, "aufolder","author.html"), "text/html");
        }
        return new PhysicalFileResult(Path.Combine(basePath, "error.html"), "text/html");;
    }

    三、FileExtensionContentTypeProvider类的使用

    此类包含一个将文件扩展名映射到MIME内容类型的集合,代码如下:

    FileExtensionContentTypeProvider provider=new FileExtensionContentTypeProvider();
    provider.Mappings.Add(".sam", "text/plain");
    //自定义静态文件访问
    app.UseStaticFiles(new StaticFileOptions(){
        FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "mystatic")),
        RequestPath = new PathString("/sam/static"),
        ContentTypeProvider = provider
    });
    • FileExtensionContentTypeProvider类与UseStaticFiles关联使用
    • 扩展名以 "." 开头。
    • 运行结果如下:
      image
  • 相关阅读:
    混杂模式
    消息队列学习
    item21
    消息队列改写
    socket select模型
    EffectiveC++ Item11
    How to read a PCap file from Wireshark with C++
    winsock select学习
    线程安全与可重入函数
    process explorer 查看句柄或者加载的dll
  • 原文地址:https://www.cnblogs.com/cqhaibin/p/8645049.html
Copyright © 2020-2023  润新知