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)); }