获得页面名称的更好方法

Pos*_*Guy 26 asp.net

我正在使用它来获取当前页面名称.所以这将返回例如MyPage.aspx

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

必须有一个更简单的方法吗?这意味着必须有.NET框架中的现有方法或属性.

Mar*_*son 49

我解释这个问题的方式,你正在寻找的是一种有效的方法来检索当前正在执行的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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果要获取当前正在执行的页面的完全限定(或"root")路径,可以使用Server.MapPath,如下所示:

string path = Server.MapPath(Page.AppRelativeVirtualPath);
Run Code Online (Sandbox Code Playgroud)

使用AppRelativeVirtualPath即使在使用URL重写时也可以使用,因为它不使用Request.Url(由用户提供),所以您不必担心潜在的恶意数据.


Chr*_*sic 9

HttpContext.Current.CurrentHandler是你想要的?

因为你对物理文件名和页面对象更感兴趣

var page = (Page) HttpContext.Current.CurrentHandler;
string url = page.AppRelativeVirtualPath;
Run Code Online (Sandbox Code Playgroud)

这与来自@Markus Olsson的信息一起,即使您不在页面课程中,也可以在执行期间的任何时候访问该页面.


Hab*_*eeb 8

我用Request.Url.Segments.Last(),我觉得它很优雅.

  • .最后给了我一个错误(“不是段的一部分”)。我使用“Request.Url.Segments[Request.Url.Segments.Length-1]”代替。 (2认同)

Saa*_*aar 5

只是出于兴趣,我很少对智能进行搜索。找不到任何财产。在其他方面仍然是相同的逻辑。

string currentPageName = System.IO.Path.GetFileName(Request.Url.AbsolutePath);
Run Code Online (Sandbox Code Playgroud)