Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

То, как я интерпретирую вопрос, то, что вы ищете, - это эффективный способ получить имя текущей исполняемой страницы 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 (который предоставляется вашими пользователями), вам не нужно беспокоиться о потенциально вредоносных данных.

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

Dim MyPage As String = Path.GetFileName(Page.AppRelativeVirtualPath.ToString).ToString

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

Ответ 7

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

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

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

string pageName = this.GetPageName();

Марк

Ответ 8

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