asp .net core静态文件资源的深入讲解_实用技巧

来源:脚本之家  责任编辑:小易  

服务器文夹没有权限www.zgxue.com防采集请勿采集本网。

前言

对静态资源的简单的一个概况,在《重新整理.net core 计1400篇》系列后面会深入。

window7 X64 RC2 :https://download.microsoft.com/download/4/6/1/46116DFF-29F9-4FF8-94BF-F9BE05BE263B/DotNetCore.1.0.0.RC2-VS2015Tools.Preview1.exe 主要的是,教程里第一步说的是,如果是升级RC2,要把老的版本卸载掉。我安装时候,并

正文

我们在加入中间件是这样写的:

这个吧,可能有些东西你不太理解造成的。 关于性能提升的问题,net core是否性能提升10倍?答案是还真差不多!为什么呢?这是因为.net core为了跨平台,编译的方式使用的是dotnet publish -r 版本,例如发布到windows X64的机器上,使用的命令就

app.UseStaticFiles();

ASP.net mvc5和asp.net.core有什么区别呢,前景如何: 区别: asp.net mvc5只能运行在Windows,一般通过IIS发布。 asp.net core开源,可跨平台,能够发布到Linux等系统上。asp.net core做了很多的整合工作,目前来说完成了最基本的一部分类库的

默认是给wwwroot提供资源。

那么我访问https://localhost:44330/js/site.js 资源,就可以访问到。

// Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification// for details on configuring this project to bundle and minify static web assets.// Write your JavaScript code.

同样我们可以自定义路径。

app.UseStaticFiles(new StaticFileOptions {FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "Static")),RequestPath="/static"});

上面在根目录下的static建立路由,路由路径static 为标识。

访问:

https://localhost:44330/static/images/index.jpg

就能看到一张图片了。

同样再次访问,https://localhost:44330/js/site.js 依然可以访问,看了这个wwwroot 是一个钉子户,无论如何添加还是存在的。

const string cacheMaxAge = "60480";app.UseHttpsRedirection();app.UseStaticFiles(new StaticFileOptions {FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "Static")),RequestPath="/static",OnPrepareResponse = ctx => {ctx.Context.Response.Headers.Append("cache-control", $"public,max-age={cacheMaxAge}");}});

可以设置一些缓存。

静态文件授权

官方倒是提供了两种方法。

一种是,让静态文件路由放到权限之后。

app.UseAuthentication();app.UseAuthorization();app.UseStaticFiles(new StaticFileOptions{FileProvider = new PhysicalFileProvider( Path.Combine(env.ContentRootPath, "Static")),RequestPath = "/static"});

另一种比较自定义高:

[Authorize]public IActionResult BannerImage(){ var filePath = Path.Combine( _env.ContentRootPath, "MyStaticFiles", "images", "red-rose.jpg"); return PhysicalFile(filePath, "image/jpeg");}

可以根据参数做一些逻辑变化。

但是这些方式比较影响性能,一般来说静态文件是开放的,而用户上传的文件是通过加密的,放在存储服务器上。

当然小型项目,可以用用。

静态文件目录

Configure中添加:

app.UseDirectoryBrowser(new DirectoryBrowserOptions{FileProvider=new PhysicalFileProvider(Path.Combine(env.ContentRootPath,"Static")),RequestPath="/static"});

这个中间件注入的位置是应该在UseRouting之前的,同样是性能问题。

然后在ConfigureServices中添加:

services.AddDirectoryBrowser();

效果:

这种方式呢,一般只是在dev环境下打开,真正的生产环境由于安全问题就不打开的。

默认文档

app.UseDefaultFiles();app.UseStaticFiles();

app.UseStaticFiles(); 才是真正的路由。

app.UseDefaultFiles(); 只是说提供一些参数,比如配置下面这些为默认项。

default.htmdefault.htmlindex.htmindex.html

其实是这样一个过程,app.UseStaticFiles() 如果没有找到相应的路由,那么应该给下一个中间件。

如果调用了app.UseDefaultFiles(),那么会去找是否存在默认项,默认是去wwwroot 下寻找上述的默认项。

默认文档可以进行修改:

var options = new DefaultFilesOptions();options.DefaultFileNames.Clear();options.DefaultFileNames.Add("mydefault.html");app.UseDefaultFiles(options);app.UseStaticFiles();

UseFileServer 结合了 UseStaticFiles、UseDefaultFiles 和 UseDirectoryBrowser(可选)的功能。

app.UseFileServer(enableDirectoryBrowsing: true);

enableDirectoryBrowsing 表示是否使用UseDirectoryBrowser。

FileExtensionContentTypeProvider

FileExtensionContentTypeProvider 类包含 Mappings 属性,用作文件扩展名到 MIME 内容类型的映射。

比如说我去访问:https://localhost:44330/static/test.myapp

我在static 下有test.mapp 这个文件,但是静态文件处理并没有去处理。

原因:

客服端发了这样一个请求,人家接受这些流,但是服务器找到到,myapp 对应的媒体类型,那么这个时候客户端就不会接受了,服务端也认为没有找到。

官方给了例子:

var provider = new FileExtensionContentTypeProvider();// Add new mappingsprovider.Mappings[".myapp"] = "application/x-msdownload";provider.Mappings[".htm3"] = "text/html";provider.Mappings[".image"] = "image/png";// Replace an existing mappingprovider.Mappings[".rtf"] = "application/x-msdownload";// Remove MP4 videos.provider.Mappings.Remove(".mp4");app.UseDefaultFiles();app.UseStaticFiles();app.UseStaticFiles(new StaticFileOptions{FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "Static")),RequestPath = "/static",OnPrepareResponse = ctx => {ctx.Context.Response.Headers.Append("cache-control", $"public,max-age={cacheMaxAge}");},ContentTypeProvider= provider}

给他加一个媒体类型,认为myapp 应该是一个需要下载文件。

然后运行之,然后就会出现下载。

同样,我们写的是.html,如果我们不喜欢可以去写.htm3也行。

https://localhost:44330/static/index.htm3

结果:

因为provider.Mappings[".htm3"] = "text/html"; ,.htm3被映射成了text/html,那么客户端就按照这种格式处理。所以模板引擎就可以多样性,有兴趣自己也可以去设计。

这就是媒体类型映射。

如果是媒体类型未知的情况下,那么可以这样:

app.UseStaticFiles(new StaticFileOptions{FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "Static")),RequestPath = "/static",OnPrepareResponse = ctx => {ctx.Context.Response.Headers.Append("cache-control", $"public,max-age={cacheMaxAge}");},ServeUnknownFileTypes = true,DefaultContentType = "image/png"});

ServeUnknownFileTypes true

DefaultContentType "image/png" 让客户端按照图片处理。

但是官方给了建议。

启用 ServeUnknownFileTypes 会形成安全隐患。 它默认处于禁用状态,不建议使用。

FileExtensionContentTypeProvider 提供了更安全的替代方法来提供含非标准扩展名的文件。

总结

到此这篇关于asp .net core静态文件资源的文章就介绍到这了,更多相关asp .net core静态文件资源内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网! 您可能感兴趣的文章:解析如何利用一个ASP.NET Core应用来发布静态文件.Net Core中间件之静态文件(StaticFiles)示例详解.NET Core单文件发布静态编译AOT CoreRT的方法详解c# .Net Core静态文件服务器的新人入门教程ASP.NET Core静态文件的使用方法ASP.NET Core静态文件使用教程(9)ASP.NET Core中预压缩静态文件的方法步骤1个文件如何轻松搞定Asp.net core 3.1动态页面转静态页面ASP.NET Core 应用程序中的静态文件中间件的实现浅谈ASP.NET Core静态文件处理源码探究

这属于思路问题,在部署的2113时候将5261你的静态文件全部禁止访问4102,然后,使用一个专门的接口,根1653据条件进行读取这个静态文件,最后使用httpResponseMessage.Content = new StreamContent(fileStream);HttpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 传输到调用者那就行了内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • 详解webapiclient的jsonpatch局部更新
  • 深入学习.net验证码生成及使用方法
  • asp.net mvc 动态编译生成controller的方法
  • c#.net中const和readonly的区别
  • asp.net 类库中使用configurationmanager.connectionstrings
  • asp.net中的参数与特殊类型和特性
  • asp.net基础学习之前端页面布局
  • .net笔记之:delegate内部原理的分析
  • asp.net 自带报表的使用详解
  • asp.net操作excel的总结篇
  • ASP.NET Core中如何对静态文件进行授权
  • asp.net core 上传文件服务器拒绝是为什么?
  • Asp.Net Core 2 中修改视图文件需要重新编译
  • microsoft.aspnetcore.http 在哪个dll中
  • 如何安装aspnetcoremodule
  • asp.net core mvc 是不是未包含使用UA 动态选择dis...
  • Asp.netCore怎么启停本地服务
  • microsoft.aspnetcore.authorization 干什么用
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全基础应用实用技巧自学过程首页asp.net解析如何利用一个asp.net core应用来发布静态文件.net core中间件之静态文件(staticfiles)示例详解.net core单文件发布静态编译aot corert的方法详解c# .net core静态文件服务器的新人入门教程asp.net core静态文件的使用方法asp.net core静态文件使用教程(9)asp.net core中预压缩静态文件的方法步骤1个文件如何轻松搞定asp.net core 3.1动态页面转静态页面asp.net core 应用程序中的静态文件中间件的实现浅谈asp.net core静态文件处理源码探究详解webapiclient的jsonpatch局部更新深入学习.net验证码生成及使用方法asp.net mvc 动态编译生成controller的方法c#.net中const和readonly的区别asp.net 类库中使用configurationmanager.connectionstringsasp.net中的参数与特殊类型和特性asp.net基础学习之前端页面布局.net笔记之:delegate内部原理的分析asp.net 自带报表的使用详解asp.net操作excel的总结篇java正则表达式 pattern和matche未将对象引用设置到对象的实例 (asp.net(c#)网页跳转七种方法小结未能加载文件或程序集“xxx”或它asp.net“服务器应用程序不可用”asp.net中的几种弹出框提示基本实asp.net gridview 72般绝技asp.net生成excel并导出下载五种asp.net对路径"xxxxx"asp.net汉字转拼音和获取汉字首字asp.net静态方法弹出对话框实现思路asp.net中水印的具体实现代码asp.net中实现导出ppt文件数据的实例分享ajaxcontroltoolkit中cascadingdropdown的.net/c# memcached缓存获取所有缓存键的方asp.net(c#)获取内容第一张图片地址的函数asp.net生成验证码的方法asp.net汉字转拼音和获取汉字首字母的代码12306动态验证码启发之asp.net实现动态giasp.net(c#)读取excel的文件内容
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved