访问静态文件
常见静态文件有css样式表、js脚本、多媒体文件、html静态页面等。
Asp.Net Core 应用默认不启用对静态文件访问,如果启用需要在Startup.Configure
方法中调用UserStaticFiles
方法。
静态文件默认位于/wwwroot
目录下,若要更改位置,可用StaticFileOptions
类来进行配置。
- 例
Startup类配置静态文件参数。目录为/wwwroot/extLibs/js映射后相对URL为/js。
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
StaticFileOptions sfoption = new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(Path.Combine(env.WebRootPath, "extLibs/js")),
RequestPath = "/js"
};
app.UseStaticFiles(sfoption);
app.UseMvc();
}
}
项目下新建Pages目录,Pages下添加Index.cshtml。在header元素中引用jquery.js脚本路径就可以写为/js/jquery.js。
@page "~/"
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<style>
#rect{
background-color:red;
position:relative;
float:left;
width:100px;
height:100px;
margin:8px
}
</style>
<script type="text/javascript" src="/js/jquery.js"></script>
</head>
<body>
<div>
<button id="btnstart">向右移动</button>
<button id="btnreset">重置</button>
</div>
<div>
<div id="rect"/>
</div>
<script type="text/javascript">
$("#btnstart").click(() => {
$("#rect").animate({
left: 150
}, 600);
});
$("#btnreset").click(() => {
$("#rect").css("left", 0);
});
</script>
</body>
</html>
开启目录浏览功能
目录浏览功能允许客户端查看某个Web目录下的子目录和文件列表,可以直接查看或下载。
- 例
在 /wwwroot/images 目录下放置五个.gif文件。ConfigureServices
方法中调用AddDirectoryBrowser
方法注册服务。Configure
方法中,调用UseStaticFiles
和UseDirectoryBrowser
。
UseStaticFiles
和UseDirectoryBrowser
方法参数设置相同,但是UseStaticFiles
方法必须调用,否则客户端只能浏览目录而不能下载文件。
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddDirectoryBrowser();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(Path.Combine(env.WebRootPath, "images")),
RequestPath = "/gifs"
});
app.UseDirectoryBrowser(new DirectoryBrowserOptions
{
FileProvider = new PhysicalFileProvider(Path.Combine(env.WebRootPath, "images")),
RequestPath = "/gifs"
});
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
}
文件服务
如果既要浏览目录又要访问静态文件,比较好的替代方案是调用UserFileServer
方法。它综合了UseStaticFiles
和UseDirectoryBrowser
方法功能,参数可通过FileServerOptions
类来设置。
- 例
在wwwroot
目录下新建六个文本文件,ConfigureServices
方法中调用AddDirectoryBrowser
方法,Configure
方法中调用UserFileServer
方法,EnableDirectoryBrowsing
属性设置为true
才会提供浏览目录服务,不设置的话就相当于提供静态文件服务不能浏览目录结构。
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddDirectoryBrowser();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseFileServer(new FileServerOptions
{
FileProvider = new PhysicalFileProvider(env.WebRootPath),
RequestPath = "/files",
EnableDirectoryBrowsing = true
});
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
}