Лучший способ получить название страницы

Я использую это, чтобы получить текущее имя страницы. Так это возвращает, например, MyPage.aspx

public string GetCurrentPageName()
{
 string urlPath = Request.Url.AbsolutePath;
 FileInfo fileInfo = new FileInfo(urlPath);
 string pageName = fileInfo.Name;
 return pageName;
}

Должен быть более простой способ? Смысл в том, что в .NET Framework должен существовать существующий метод или свойство.

8 ответов

То, как я интерпретирую вопрос, что вы ищете, является эффективным способом получения имени текущей исполняемой страницы aspx, то есть System.Web.UI.Page.

Если это так, вам не нужно иметь дело с любыми объектами FileInfo или попадать в файл. Просто используйте свойство AppRelativeVirtualPath на объекте страницы.

using System;
using System.IO;
using System.Web.UI;
namespace WebApplication1
{
 public partial class _Default : System.Web.UI.Page
 {
 protected void Page_Load(object sender, EventArgs e)
 {
 string pageName = Path.GetFileNameWithoutExtension(Page.AppRelativeVirtualPath);
 }
 }
}

Если вам не удастся получить полностью (или "внедренный" ) путь к вашей текущей исполняемой странице, вы можете использовать Server.MapPath как это

string path = Server.MapPath(Page.AppRelativeVirtualPath);

Использование AppRelativeVirtualPath имеет преимущество работы, даже если вы используете переписывание URL-адресов, и поскольку он не использует Request.Url(который предоставляется вашими пользователями), вам не нужно беспокоиться о потенциально вредоносных данных.


Будет ли HttpContext.Current.CurrentHandler быть тем, что вы ищете?

Поскольку вас больше интересует физическое имя файла и объект страницы, что-то вроде строк

var page = (Page) HttpContext.Current.CurrentHandler;
string url = page.AppRelativeVirtualPath;

Это вместе с информацией от @Markus Olsson может дать вам доступ к странице в любой момент во время ее выполнения, даже если вы находитесь за пределами класса страницы.


Я использую Request.Url.Segments.Last(), который я считаю достаточно элегантным.


Просто для интереса я мало искал с intellisence. не нашел никакой собственности. еще одна и та же логика в обратном направлении.

string currentPageName = System.IO.Path.GetFileName(Request.Url.AbsolutePath);


Как было указано в одном из ответов на этот более ранний вопрос о вас, я бы выбрал вариант, который не нуждался во мне, чтобы создать FileInfo.

Существует не всегда прямое сопоставление между запрошенной страницей и объектом файловой системы, особенно при переписывании/перезаписи URL и т.д.


Dim MyPage As String = Path.GetFileName(Страница .AppRelativeVirtualPath.ToString).ToString

Это работает для меня


Не намного лучше, но вы можете попробовать этот метод расширения:

public static string GetPageName(this Page myPage)
{
 FileInfo fi =new FileInfo(myPage.MapPath(myPage.AppRelativeVirtualPath));
 return fi.Name;
}

и просто назовите его на своей странице "OnInit" или любой другой метод как:

string pageName = this.GetPageName();

Марк


System.IO.Path.GetFileName(Request.PhysicalPath)

licensed under cc by-sa 3.0 with attribution.