新建ThemeViewLocationExpander.cs 实现IViewLocationExpander接口
/// <summary>
/// 自定视图主题 实现IViewLocationExpander接口
/// </summary>
public class ThemeViewLocationExpander : IViewLocationExpander
{
public ThemeViewLocationExpander()
{
}
/// <summary>
/// 主题名称
/// /Views/+ViewLocationExpanders
/// </summary>
public string ThemeName { get; set; } = "Default";
public void PopulateValues([FromServices]ViewLocationExpanderContext context)
{
HttpContext httpcontext = context.ActionContext.HttpContext;
string theme = httpcontext.Request.GetTheme();
if (theme.IsNotNullOrEmpty())
{
ThemeName = theme;
}
context.Values["theme"] = ThemeName;
}
/// <summary>
/// 主题切换
/// </summary>
/// <param name="theme"></param>
/// <returns></returns>
public virtual IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context,
IEnumerable<string> viewLocations)
{
string n = string.Empty;
foreach (string item in viewLocations)
{
n = item.ToLower();
if (!n.Contains("/shared"))
{
n = n.Replace("{1}", $"theme/{context.Values["theme"]}/{{1}}");
}
yield return n;
}
}
}
添加新的ViewLocationExpanders
public class Startup{
public virtual void ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddRazorOptions(option =>
{
option.ViewLocationExpanders.Clear();
option.ViewLocationExpanders.Add(new ThemeViewLocationExpander());
})
}
}