欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

MVC5根据域名切换View模板_ASP.NET获取当前访问域名

程序员文章站 2022-01-21 20:53:46
...

最近有这么一个需求、就是通过不同的域名访问跳转不同的View、其实实现起来并不难、不过一般在项目上线的时候经常会有类似的需求、下面就跟大家分享一下解决方案


重写模板查找方式

public class MyRazorViewEngine : RazorViewEngine
{
    public MyRazorViewEngine() : base()
    {

    }
    private const  string DefaultView = "~/Views/";
    private const string MoblieDomain = "m.";
    private const string WwwFolder = "~/Views/www/";
    private const string MoblieFolder = "~/Views/mobile/";

    public static string GetView(HttpRequestBase request)
    {
        if (request.Url == null) return DefaultView;
        var url = request.Url.Host;
        return url.Contains(MoblieDomain) ? MoblieFolder : WwwFolder;
    }
    string GetView(ControllerContext controllerContext)
    {
        return GetView(controllerContext.HttpContext.Request);
    }
    protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
    {
        var views = GetView(controllerContext);
        return base.CreatePartialView(controllerContext, partialPath.Replace(DefaultView,views));
    }
    protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
    {
        var views = GetView(controllerContext);
        return base.CreateView(controllerContext, viewPath.Replace(DefaultView, views),
            masterPath.Replace(DefaultView, views));
    }
    protected override bool FileExists(ControllerContext controllerContext, string virtualPath)
    {
        var views = GetView(controllerContext);
        return base.FileExists(controllerContext, virtualPath.Replace(DefaultView, views));
    }
}


Application_Start()注册

ViewEngines.Engines.Add(new MyRazorViewEngine());
_ViewStart.cshtml
@{ 
    Layout = "~/Views/Shared/_Layout.cshtml".Replace("~/Views/", MyRazorViewEngine.GetView(Request)); 
}