private void wzdInstaller_ActiveStepChanged(object sender, EventArgs e) { switch (wzdInstaller.ActiveStepIndex) { case 1: break; // Finish step case 5: // Set current user default culture of the site LocalizationContext.PreferredCultureCode = SettingsKeyInfoProvider.GetValue(SiteName + ".CMSDefaultCultureCode"); // Ensure virtual path provider registration if enabled VirtualPathHelper.RegisterVirtualPathProvider(); // Check whether virtual path provider is running if (!VirtualPathHelper.UsingVirtualPathProvider) { btnWebSite.Text = ResHelper.GetFileString("Install.lnkMediumTrust"); lblMediumTrustInfo.Visible = true; } else { btnWebSite.Text = ResHelper.GetFileString("Install.lnkWebsite"); } break; } }
/// <summary> /// 获取指定虚拟路径的 HTML 处理程序 /// </summary> /// <param name="virtualPath">要获取 HTML 处理程序的虚拟路径</param> /// <returns>HTML 处理程序</returns> public static IHtmlHandler GetHandler(string virtualPath) { var services = WebServiceLocator.GetServices <IHtmlHandlerProvider>(virtualPath); foreach (var provider in services) { var handler = provider.GetHandler(virtualPath); if (handler != null) { return(handler); } } if (!HostingEnvironment.VirtualPathProvider.FileExists(virtualPath))//如果文件不存在,则直接返回 null 。 { return(null); } return (GetHandlerInternal <IHtmlHandler>(virtualPath + ".ashx") ?? GetHandlerInternal <IHtmlHandler>(GetHandlerPath(virtualPath)) ?? GetHandlerInternal <IHtmlHandler>(VirtualPathHelper.FallbackSearch(virtualPath, "_handler.ashx"))); }
/// <summary>解析模板虚拟路径</summary> /// <param name="context">上下文环境</param> /// <param name="templateValue">模板信息</param> /// <returns></returns> public string ParseTemplateVirtualPath(VelocityContext context, string virtualPath) { string templateValue = null; if (VelocityConfigurationView.Instance.TemplateCacheMode == "ON") { lock (lockDictionaryObject) { if (dictionary.ContainsKey(virtualPath)) { templateValue = dictionary[virtualPath]; } else { templateValue = File.ReadAllText(VirtualPathHelper.GetPhysicalPath(virtualPath)); dictionary.Add(virtualPath, templateValue); } } } else { templateValue = File.ReadAllText(VirtualPathHelper.GetPhysicalPath(virtualPath)); } return(Evaluate(context, templateValue)); }
/// <summary> /// 获取视图处理程序 /// </summary> /// <param name="virtualPath">视图的虚拟路径</param> /// <param name="includeDefaultHandler">是否要查找默认视图处理程序</param> /// <returns>该虚拟路径的视图处理程序</returns> internal static IViewHandler GetViewHandlerInternal(string virtualPath, bool includeDefaultHandler) { var handler = GetHandlerInternal(virtualPath); if (handler == null && !includeDefaultHandler) { handler = GetHandlerInternal(VirtualPathHelper.FallbackSearch(virtualPath, "_handler.ashx")); } return(handler ?? new ViewHandler()); }
/// <summary>保存配置信息</summary> public void Save() { string path = null; if (HttpContext.Current == null) { path = string.Format("{0}.config", Process.GetCurrentProcess().MainModule.FileName); } else { path = VirtualPathHelper.GetPhysicalPath("~/web.config"); } this.Serialize(path, KernelConfiguration.SectionName, this); }
public void TestCombine() { string url = string.Empty; url = VirtualPathHelper.Combine("http://www.kanf.cn", "issue/"); Assert.AreEqual(url, "http://www.kanf.cn/issue/"); url = VirtualPathHelper.Combine("http://www.kanf.cn/", "issue/"); Assert.AreEqual(url, "http://www.kanf.cn/issue/"); url = VirtualPathHelper.Combine("http://www.kanf.cn/news", "issue"); Assert.AreEqual(url, "http://www.kanf.cn/news/issue"); }
/// <summary> /// 渲染指定了路径的部分视图 /// </summary> /// <param name="path">部分视图的路径</param> /// <returns>渲染结果</returns> protected virtual string RenderVirtualPath(string path) { if (!VirtualPathUtility.IsAppRelative(path)) { throw VirtualPathHelper.VirtualPathFormatError("path"); } var result = JumonyPartialHandler.RenderPartial(HttpContext, path); if (result == null) { throw new HttpException(404, "找不到部分视图"); } else { return(result); } }
private string FindMasterView(string directory) { string masterPath; if (MvcEnvironment.Configuration.FallbackDefaultMaster) { masterPath = VirtualPathHelper.FallbackSearch(VirtualPathProvider, directory, "_master.html"); } else { masterPath = VirtualPathUtility.Combine(directory, "_master.html"); if (!VirtualPathProvider.FileExists(masterPath)) { masterPath = null; } } return(masterPath); }
public VirtualPathHelperTests() { TestVirtualPathProvider = new TestVirtualPathProvider(); VirtualPathHelper = new VirtualPathHelper(TestVirtualPathProvider); }
protected void Page_Load(object sender, EventArgs e) { // Register script for pendingCallbacks repair ScriptHelper.FixPendingCallbacks(Page); // Handle Import settings if (!Page.IsCallback && !RequestHelper.IsPostBack()) { // Initialize virtual path provider VirtualPathHelper.Init(Page); // Initialize import settings ImportSettings = GetNewSettings(); } if (!Page.IsCallback) { if (!SettingsKeyProvider.UsingVirtualPathProvider) { lblWarning.Visible = true; lblWarning.Text = GetString("ImportSite.VirtualPathProviderNotRunning"); } ctrlAsync.OnFinished += ctrlAsync_OnFinished; ctrlAsync.OnError += ctrlAsync_OnError; bool notTempPermissions = false; if (wzdImport.ActiveStepIndex < 3) { stpConfigImport.Settings = ImportSettings; stpSiteDetails.Settings = ImportSettings; stpImport.Settings = ImportSettings; // Ensure directory DirectoryHelper.EnsureDiskPath(ImportSettings.TemporaryFilesPath + "\\temp.file", ImportSettings.WebsitePath); // Check permissions notTempPermissions = !DirectoryHelper.CheckPermissions(ImportSettings.TemporaryFilesPath, true, true, false, false); } if (notTempPermissions) { pnlWrapper.Visible = false; lblError.Text = string.Format(GetString("ImportSite.ErrorPermissions"), ImportSettings.TemporaryFilesPath, WindowsIdentity.GetCurrent().Name); pnlPermissions.Visible = true; lnkPermissions.Target = "_blank"; lnkPermissions.Text = GetString("Install.ErrorPermissions"); lnkPermissions.NavigateUrl = ResolveUrl("~/CMSMessages/ConfigurePermissions.aspx"); } else { if (!RequestHelper.IsPostBack()) { // Delete temporary files try { // Delete only folder structure if there is not special folder bool onlyFolderStructure = !Directory.Exists(DirectoryHelper.CombinePath(ImportSettings.TemporaryFilesPath, ImportExportHelper.FILES_FOLDER)); ImportProvider.DeleteTemporaryFiles(ImportSettings, onlyFolderStructure); } catch (Exception ex) { pnlWrapper.Visible = false; lblError.Text = GetString("ImportSite.ErrorDeletionTemporaryFiles") + ex.Message; return; } } // Javascript functions string script = "var imMessageText = '';\n" + "var imErrorText = '';\n" + "var imWarningText = '';\n" + "var imMachineName = '" + SqlHelperClass.MachineName.ToLowerCSafe() + "';\n" + "var getBusy = false;\n" + "function GetImportState(cancel)\n" + "{ if(window.Activity){window.Activity();} if (getBusy && !cancel) return; getBusy = true; setTimeout(\"getBusy = false;\", 2000); var argument = cancel + ';' + imMessageText.length + ';' + imErrorText.length + ';' + imWarningText.length + ';' + imMachineName; return " + Page.ClientScript.GetCallbackEventReference(this, "argument", "SetImportStateMssg", "argument", true) + " }\n"; script += "function SetImportStateMssg(rValue, context)\n" + "{\n" + " getBusy = false;\n" + " if(rValue != '')\n" + " {\n" + " var args = context.split(';');\n" + " var values = rValue.split('" + SiteExportSettings.SEPARATOR + "');\n" + " var messageElement = document.getElementById('" + lblProgress.ClientID + "');\n" + " var errorElement = document.getElementById('" + lblError.ClientID + "');\n" + " var warningElement = document.getElementById('" + lblWarning.ClientID + "');\n" + " var messageText = imMessageText;\n" + " messageText = values[1] + messageText.substring(messageText.length - args[1]);\n" + " if(messageText.length > imMessageText.length){ imMessageText = messageElement.innerHTML = messageText; }\n" + " var errorText = imErrorText;\n" + " errorText = values[2] + errorText.substring(errorText.length - args[2]);\n" + " if(errorText.length > imErrorText.length){ imErrorText = errorElement.innerHTML = errorText; }\n" + " var warningText = imWarningText;\n" + " warningText = values[3] + warningText.substring(warningText.length - args[3]);\n" + " if(warningText.length > imWarningText.length){ imWarningText = warningElement.innerHTML = warningText; }\n" + " if((values=='') || (values[0]=='F'))\n" + " {\n" + " StopImportStateTimer();\n" + " BTN_Disable('" + CancelButton.ClientID + "');\n" + " BTN_Enable('" + FinishButton.ClientID + "');\n" + " }\n" + " }\n" + "}\n"; // Register the script to perform get flags for showing buttons retrieval callback ScriptHelper.RegisterClientScriptBlock(this, GetType(), "GetSetImportState", ScriptHelper.GetScript(script)); // Add cancel button attribute CancelButton.Attributes.Add("onclick", "BTN_Disable('" + CancelButton.ClientID + "');" + "return CancelImport();"); wzdImport.NextButtonClick += wzdImport_NextButtonClick; wzdImport.PreviousButtonClick += wzdImport_PreviousButtonClick; wzdImport.FinishButtonClick += wzdImport_FinishButtonClick; if (!RequestHelper.IsPostBack()) { stpConfigImport.InitControl(); } } } }
protected override Stream ObtainStream() { return(FileHelper.ToStream(VirtualPathHelper.GetPhysicalPath(name))); }
protected void Page_Load(object sender, EventArgs e) { // Register script for pendingCallbacks repair ScriptHelper.FixPendingCallbacks(this.Page); // Handle export settings if (!Page.IsCallback && !RequestHelper.IsPostBack()) { // Initialize virtual path provider VirtualPathHelper.Init(Page); ExportSettings = GetNewSettings(); } if (!Page.IsCallback) { // Display BETA warning lblBeta.Visible = CMSContext.IsBetaVersion(); lblBeta.Text = string.Format(GetString("export.BETAwarning"), CMSContext.GetFriendlySystemVersion(false)); bool notTargetPermissions = false; bool notTempPermissions = false; ctrlAsync.OnFinished += ctrlAsync_OnFinished; ctrlAsync.OnError += ctrlAsync_OnError; // Init steps if (wzdExport.ActiveStepIndex < 2) { configExport.Settings = ExportSettings; if (!RequestHelper.IsPostBack()) { configExport.SiteId = SiteId; } pnlExport.Settings = ExportSettings; // Ensure directories and check permissions try { DirectoryHelper.EnsureDiskPath(ExportSettings.TargetPath + "\\temp.file", ExportSettings.WebsitePath); notTargetPermissions = !DirectoryHelper.CheckPermissions(ExportSettings.TargetPath, true, true, false, false); } catch (UnauthorizedAccessException) { notTargetPermissions = true; } try { DirectoryHelper.EnsureDiskPath(ExportSettings.TemporaryFilesPath + "\\temp.file", ExportSettings.WebsitePath); notTempPermissions = !DirectoryHelper.CheckPermissions(ExportSettings.TemporaryFilesPath, true, true, false, false); } catch (UnauthorizedAccessException) { notTempPermissions = true; } } if (notTargetPermissions || notTempPermissions) { string folder = (notTargetPermissions) ? ExportSettings.TargetPath : ExportSettings.TemporaryFilesPath; pnlWrapper.Visible = false; lblError.Text = string.Format(GetString("ExportSite.ErrorPermissions"), folder, System.Security.Principal.WindowsIdentity.GetCurrent().Name); pnlPermissions.Visible = true; lnkPermissions.Target = "_blank"; lnkPermissions.Text = GetString("Install.ErrorPermissions"); lnkPermissions.NavigateUrl = ResolveUrl("~/CMSMessages/ConfigurePermissions.aspx"); } else { // Try to delete temporary files from previous export if (!RequestHelper.IsPostBack()) { try { ExportProvider.DeleteTemporaryFiles(ExportSettings, false); } catch (Exception ex) { pnlWrapper.Visible = false; lblError.Text = GetString("ImportSite.ErrorDeletionTemporaryFiles") + ex.Message; return; } } PortalHelper.EnsureScriptManager(this.Page).EnablePageMethods = true; // Javascript functions string script = @"var exMessageText = ''; var exErrorText = ''; var exWarningText = ''; var exMachineName = '" + SqlHelperClass.MachineName.ToLower() + @"'; var getBusy = false; function GetExportState(cancel) { if (window.Activity) { window.Activity(); } if (getBusy) return; getBusy = true; setTimeout('getBusy = false;', 2000); var argument = cancel + ';' + exMessageText.length + ';' + exErrorText.length + ';' + exWarningText.length + ';' + exMachineName; " + Page.ClientScript.GetCallbackEventReference(this, "argument", "SetExportStateMssg", "argument", false) + @"; } function SetExportStateMssg(rValue, context) { getBusy = false; if (rValue!='') { var args = context.split(';'); var values = rValue.split('" + SiteExportSettings.SEPARATOR + @"'); var messageElement = document.getElementById('" + lblProgress.ClientID + @"'); var errorElement = document.getElementById('" + lblError.ClientID + @"'); var warningElement = document.getElementById('" + lblWarning.ClientID + @"'); var messageText = exMessageText; messageText = values[1] + messageText.substring(messageText.length - args[1]); if (messageText.length > exMessageText.length) { exMessageText = messageElement.innerHTML = messageText; } var errorText = exErrorText; errorText = values[2] + errorText.substring(errorText.length - args[2]); if (errorText.length > exErrorText.length) { exErrorText = errorElement.innerHTML = errorText; } var warningText = exWarningText; warningText = values[3] + warningText.substring(warningText.length - args[3]); if (warningText.length > exWarningText.length) { exWarningText = warningElement.innerHTML = warningText; } if ((values=='') || (values[0]=='F')) { StopExportStateTimer(); BTN_Enable('" + FinishButton.ClientID + @"'); try { BTN_Disable('" + CancelButton.ClientID + @"'); } catch(err) { } } } }"; // Register the script to perform get flags for showing buttons retrieval callback ScriptHelper.RegisterClientScriptBlock(this, GetType(), "GetSetExportState", ScriptHelper.GetScript(script)); // Add cancel button attribute CancelButton.Attributes.Add("onclick", "BTN_Disable('" + CancelButton.ClientID + "'); return CancelExport();"); wzdExport.NextButtonClick += wzdExport_NextButtonClick; wzdExport.PreviousButtonClick += wzdExport_PreviousButtonClick; wzdExport.FinishButtonClick += wzdExport_FinishButtonClick; if (!RequestHelper.IsPostBack()) { configExport.InitControl(); } } } }
protected void Page_Load(object sender, EventArgs e) { // Register script for pendingCallbacks repair ScriptHelper.FixPendingCallbacks(Page); // Handle Import settings if (!Page.IsCallback && !RequestHelper.IsPostBack()) { // Check if any template is present on the disk if (!WebTemplateInfoProvider.IsAnyTemplatePresent()) { selectTemplate.StopProcessing = true; pnlWrapper.Visible = false; lblError.Visible = true; lblError.Text = GetString("NewSite.NoWebTemplate"); } // Initialize virtual path provider VirtualPathHelper.Init(Page); // Initialize import settings ImportSettings = new SiteImportSettings(CMSContext.CurrentUser); ImportSettings.WebsitePath = Server.MapPath("~/"); ImportSettings.PersistentSettingsKey = PersistentSettingsKey; } if (Page.IsCallback) { // Stop processing when callback selectTemplate.StopProcessing = true; selectMaster.StopProcessing = true; } else { selectTemplate.StopProcessing = (CausedPostback(PreviousButton) && (wzdImport.ActiveStepIndex == 2)) ? false : (wzdImport.ActiveStepIndex != 1); selectMaster.StopProcessing = (wzdImport.ActiveStepIndex != 5); PreviousButton.Enabled = true; PreviousButton.Visible = (wzdImport.ActiveStepIndex <= 4); NextButton.Enabled = true; // Bind async controls events ctrlAsync.OnFinished += ctrlAsync_OnFinished; ctrlAsync.OnError += ctrlAsync_OnError; ctrlImport.OnFinished += ctrlImport_OnFinished; if (wzdImport.ActiveStepIndex < 4) { siteDetails.Settings = ImportSettings; pnlImport.Settings = ImportSettings; } // Javascript functions string script = "var nMessageText = '';\n" + "var nErrorText = '';\n" + "var nWarningText = '';\n" + "var nMachineName = '" + SqlHelperClass.MachineName.ToLowerCSafe() + "';\n" + "var getBusy = false; \n" + "function GetImportState(cancel) \n" + "{ if(window.Activity){window.Activity();} if (getBusy && !cancel) return; getBusy = true; setTimeout(\"getBusy = false;\", 2000); var argument = cancel + ';' + nMessageText.length + ';' + nErrorText.length + ';' + nWarningText.length + ';' + nMachineName; return " + Page.ClientScript.GetCallbackEventReference(this, "argument", "SetImportStateMssg", "argument", true) + " } \n"; script += "function SetImportStateMssg(rValue, context) \n" + "{ \n" + " getBusy = false; \n" + " if(rValue!='') \n" + " { \n" + " var args = context.split(';');\n" + " var values = rValue.split('" + SiteExportSettings.SEPARATOR + "');\n" + " var messageElement = document.getElementById('" + lblProgress.ClientID + "');\n" + " var errorElement = document.getElementById('" + lblError.ClientID + "');\n" + " var warningElement = document.getElementById('" + lblWarning.ClientID + "');\n" + " var messageText = nMessageText;\n" + " messageText = values[1] + messageText.substring(messageText.length - args[1]);\n" + " if(messageText.length > nMessageText.length){ nMessageText = messageElement.innerHTML = messageText; }\n" + " var errorText = nErrorText;\n" + " errorText = values[2] + errorText.substring(errorText.length - args[2]);\n" + " if(errorText.length > nErrorText.length){ nErrorText = errorElement.innerHTML = errorText; }\n" + " var warningText = nWarningText;\n" + " warningText = values[3] + warningText.substring(warningText.length - args[3]);\n" + " if(warningText.length > nWarningText.length){ nWarningText = warningElement.innerHTML = warningText; }\n" + " if((values=='') || (values[0]=='F')) \n" + " { \n" + " StopImportStateTimer(); \n" + " if (!document.importCancelled) { \n" + " if(values[2] == '') { \n" + " BTN_Enable('" + NextButton.ClientID + "'); \n" + " } \n" + " else { \n" + " BTN_Enable('" + PreviousButton.ClientID + "'); \n" + " } \n" + " BTN_Disable('" + CancelButton.ClientID + "'); \n" + " } \n" + " } \n" + " } \n" + "} \n"; // Register the script to perform get flags for showing buttons retrieval callback ScriptHelper.RegisterClientScriptBlock(this, GetType(), "GetSetImportState", ScriptHelper.GetScript(script)); // Add cancel button attribute CancelButton.Attributes.Add("onclick", "BTN_Disable('" + CancelButton.ClientID + "'); " + "CancelImport();" + ((wzdImport.ActiveStepIndex == 3) ? string.Empty : "BTN_Enable('" + PreviousButton.ClientID + "'); ") + "document.importCancelled = true;return false;" ); wzdImport.NextButtonClick += wzdImport_NextButtonClick; wzdImport.PreviousButtonClick += wzdImport_PreviousButtonClick; wzdImport.FinishButtonClick += wzdImport_FinishButtonClick; } }
public HttpControllerDescriptor SelectController(HttpRequestMessage request) { var routeData = (IHttpRouteData)request.Properties[System.Web.Http.Hosting.HttpPropertyKeys.HttpRouteDataKey]; if (routeData == null) { return(null); } //处理路由中action可能与args错位的问题。 if (routeData.Values.TryGetValue("action", out var action) && action != null) { foreach (var chr in (string)action) { //如果action包含非数字、字母及下划线字符则认为其与args错位了 if (!Char.IsLetterOrDigit(chr) && chr != '_') { routeData.Values["args"] = action; routeData.Values["action"] = null; break; } } } string areaName, controllerPath; if (routeData.Route.DataTokens.TryGetValue("area", out var area)) { areaName = (string)area; } else { areaName = VirtualPathHelper.GetArea(routeData.Route.RouteTemplate); } if (string.IsNullOrWhiteSpace(areaName)) { controllerPath = Zongsoft.Plugins.PluginPath.Combine(ROOT_CONTROLLERS_PATH, (string)routeData.Values["controller"]); } else { controllerPath = Zongsoft.Plugins.PluginPath.Combine(ROOT_CONTROLLERS_PATH, areaName, (string)routeData.Values["controller"]); } var node = _pluginContext.PluginTree.Find(controllerPath); if (node == null) { return(null); } routeData.Values["area"] = areaName; routeData.Values["controller.path"] = controllerPath; //如果显式指定了动作名并且当前控制器节点有子节点,则进行子控制器的匹配 if (action is string actionName && actionName.Length > 0 && node.Children.Count > 0) { foreach (var child in node.Children) { if (string.Equals(child.Name, actionName, StringComparison.OrdinalIgnoreCase)) { routeData.Values["controller"] = node.Name + "." + child.Name; routeData.Values["controller.path"] = child.FullPath; //修正子控制器的路由信息 AmendRoutes(request.Method.Method, routeData.Values); //将控制器节点更改为匹配的子节点 node = child; break; } } } var descriptor = new PluginHttpControllerDescriptor(request.GetConfiguration(), node); descriptor.Properties["route.area"] = areaName; descriptor.Properties["http.method"] = request.Method.Method; return(descriptor); }
/// <summary> /// Registers the folders handled by virtual path provider /// </summary> private static void RegisterVirtualFolders() { VirtualPathHelper.RegisterVirtualPath("~/CMSWebParts/", false); VirtualPathHelper.RegisterVirtualPath("~/CMSFormControls/", false); VirtualPathHelper.RegisterVirtualPath("~/CMSPages/", false); }