c# - 在 ASP.NET Core for SPA 中确定基于路由或域的静态文件
问题描述
是否可以根据 ASP.NET Core 2 / 3 + 中的路由返回不同的静态文件?
例如:
app.domain.com
index.html
会为公共 SPA渲染一些(ReactJS / VueJS)
admin.domain.com
index.html
会为私人认证的 SPA (Angular)渲染一些其他的
www.domain.com
index.html
将为公共登录页面呈现三分之一
我在文档中找不到如何https://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files?view=aspnetcore-3.0
解决方案
您可以随时尝试自定义文件提供程序:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions<StaticFileOptions>()
.Configure<IHttpContextAccessor, IWebHostEnvironment>(
delegate(StaticFileOptions options, IHttpContextAccessor httpContext, IWebHostEnvironment env)
{
options.FileProvider = new ClientAppFileProvider (httpContext, env);
}
);
}
public void Configure(IApplicationBuilder app)
{
app.UseStaticFiles();
}
}
public class ClientAppFileProvider : IFileProvider
{
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IWebHostEnvironment _env;
public ClientAppFileProvider(IHttpContextAccessor httpContextAccessor, IWebHostEnvironment env)
{
_httpContextAccessor = httpContextAccessor;
_env = env;
}
public IDirectoryContents GetDirectoryContents(string subpath)
{
return _env.WebRootFileProvider.GetDirectoryContents(subpath); ;
} // End Function GetDirectoryContents
public IFileInfo GetFileInfo(string subpath)
{
string host = _httpContextAccessor.HttpContext.Request.Host.Host;
if (host.Equals("app.domain.com"))
{
subpath = Path.Combine("app", subpath);
}
else if (host.Equals("admin.domain.com"))
{
subpath = Path.Combine("admin", subpath);
}
else if (host.Equals("www.domain.com"))
{
subpath = Path.Combine("www", subpath);
}
// return _env.ContentRootFileProvider.GetFileInfo(subpath);
return _env.WebRootFileProvider.GetFileInfo(subpath);
}
public IChangeToken Watch(string filter)
{
return _env.WebRootFileProvider.Watch(filter);
} // End Function Watch
}
推荐阅读
- mysql - 在mySql中,我怎么能问:从表1中选择这一行,其中x =表2中的列或表2中没有行
- python - 如何安装kivy
- mysql - 如何在排序限制后获得 WITH ROLLUP
- python - 如何在不将其注册为机器人的情况下创建不和谐机器人?
- sql - 为班级项目建立航空公司数据库
- javascript - 表示无效的 CSRF 令牌错误,我尝试了其他问题的建议无济于事
- google-cloud-platform - 如何向谷歌云上的用户帐户授予服务帐户访问权限
- prolog - 在 prolog 中写入文件的问题
- aframe - 鼠标光标仅在框架检查器打开时才有效?
- python - SQLAlchemy 在同一操作中更新和获取