• ASP.NET5 静态文件


    静态文件,包括HTML文件,CSS文件,图像文件和JavaScript文件,它是一个应用里所包含的资源。

    1. 提供静态文件

    默认的,静态文件存储在你的webroot目录下面,webroot的路径定义在project.json里面

    "webroot": "wwwroot"

    静态文件可以被存储在webroot下面的任何目录当中,以一个相对目录获取到。在一个默认的web应用程序当中,在webroot下面默认有三个目录css, images和js. 要获取图像路径,格式如下:

    http://<yourApp>/images/<imageFileName>

    为了应用静态文件,你必须在Configure方法中注册

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)

    {

      app.UseStaticFiles();

    }

    如果你有不在webroot目录下的静态文件需要添加,如何做呢

    假如文件目录如下:

    * wwwroot

      *css

      *images

      *....

    *MyStaticFiles

      * test.png

    要获取test.png,如何做呢,我们需要在Configure添加如下的代码:

    app.UseStaticFiles(new StaticFileOptions()

    {

      FileProvider = new PhysicalFileProvider(@"D:SourceWebApplication1srcWebApplciation1MyStaticFiles"),

      RequestPath = new PathString("/StaticFiles")

    });

    这样,用户就可以通过http://<yourApp>/StaticFiles/test.png来获取test.png文件了.

    2. 使目录可预览

    上当浏览可以使用户浏览你的目录和子目录信息,默认的这个功能是关闭的,要使其打开,可以在COnfigure里增加如下代码:

    app.UseDirectoryBrowser();

    同样的,webroot目录以外的静态资源要被浏览,做如下配置:

    app.UseDirectoryBrowser(new DirectoryBrowserOptions()

    {

      FileProvider = new PhysicalFileProvider(@"..."),

      RequestPath = new PathString("/StaticFiles")

    });

    你可以通过http://<yourApp>/StaticFiles去浏览.

    3. 提供默认的文件

    为了不输入全路径而要显示默认的文件,可以通过UseDefaultFiles扩展方法来扩展。注意,你还必须调用UseStaticFIles,这是因为UseDefaultFile是URL重写,他实际上不提供文件。

    app.UseDefaultFiles();

    app.UseStaticFiles();

    如果你用了UseDefaultFiles, 中间件会找如下的页面作为默认页面。

    *default.htm

    *default.html

    *index.htm

    *index.html

    要定义自己的默认文件,代码如下:

    DefaultFileOptions options = new DefaultFileOptions();

    options.DefaultFileNames.Clear();

    options.DefaultFileNames.Add("mydefault.html");

    app.UseDefaultFiles(options);

    app.UseStaticFiles();

    如果你想用一个默认的页面在webroot之外,你也必须再调用一下UseStaticFiles, UseDefaultFiles方法传参数进去。这样比较麻烦,可以用UseFileServer代替

    4. UseFileServer方法

    UseFileServer方法可以合并UseStaticFiles, UseDefaultFiles和UseDirectoryBrowser方法。

    app.UseFileServer();   或者 app.UseFileServer(enableDirectoryBrowsing: true);

    你要在webroot以处定义你的静态文件,代码如下:

    app.UserFileServer(new FileServerOptions()

    {

      FileProvider = new PhysicalFileProvider(@"D:SourceWebApplication1srcWebApplication1MyStaticFiles"),

      RequestPath = new PathString("/StaticFiles"),

      EnableDirectoryBrowsing = true

    });

    5. Content types

    ASP.NET提供了差不多400多个文件类型,如果你试图访问一个未知的文件类型,ASP.NET中间件不会提供这个文件。

    例如有一个文件路径

    * wwwroot

      * images

        *test.image

    如果你访问http://<yourApp>/images/test.image, 你会得到一个404的错误,尽管这个文件实际上存在。你可以当开这个限制,如下所示:

    app.UseStaticFiles(new StaticFileOptions

    {

      ServerUnknownFileTypes = true,

      DefaultContentType = "image/png"

    });

    这样,如果用户浏览一个未定义的文件格式,浏览器会以一个图片的格式在渲染它。

    如果你有很多的文件类型是ASP.NET不知道,该怎么做呢?FileExtensionContentTypeProvider类可以帮助你。代码如下:

    var provider = new FileExtensionContentTypeProvider();

    provider.Mappings.Add(".myapp", "application/x-msdownload");

    app.UseStaticFiles(new StaticFileOptions{ ContentTypeProvider = provider});

    这样,如果用户请求.myapp的文件,浏览器会下载该文件.

    6. IIS

    IIS有个本地的静态文件的模块,它独立于ASP.NET的静态文件,ASP.NET模块在IIS本地模块之前运行,在ASP.NET Beta7 , IIS 宿主改变了,如果ASP.NET不处理,IIS本地模块也不处理。如果要选择执行IIS本地的模块,需要执行如下代码:

    app.RunIISPipeline();

    注意:代码文件应该放在webroot之外,这样可以把静态文件和动态文件区分开来。

     

  • 相关阅读:
    [转]面向对象的三个基本特征
    C#验证Email
    天气预报
    【原】c#实现数字金额转换成大写金额
    C#发送Email
    DIV 显示最上层
    ArrayList 与 String[] 之间的转换
    Flex与.NET互操作(五):FileReference+HttpHandler实现上传/下载
    Flex与.NET互操作(三):基于WebService的数据访问(下)
    Flex与.NET互操作(六):Flex和.NET协同开发利器FluorineFx
  • 原文地址:https://www.cnblogs.com/superkklot/p/5078464.html
Copyright © 2020-2023  润新知