我正在使用它来获取当前页面名称..所以这会返回例如MyPage.aspx
public string GetCurrentPageName()
{
string urlPath = Request.Url.AbsolutePath;
FileInfo fileInfo = new FileInfo(urlPath);
string pageName = fileInfo.Name;
return pageName;
}
必须有一种更简单的方法吗?这意味着必须有.NET框架中的现有方法或属性。
答案 0 :(得分:43)
我解释这个问题的方式,你正在寻找的是一种有效的方法来检索当前正在执行的 aspx页面的名称,即System.Web.UI.Page。
如果确实如此,则不必处理任何FileInfo对象或命中文件系统。只需使用页面对象上的AppRelativeVirtualPath property:
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(由用户提供),所以您不必担心潜在的恶意数据。
答案 1 :(得分:8)
HttpContext.Current.CurrentHandler
会成为您想要的吗?
因为你对物理文件名和页面对象更感兴趣
var page = (Page) HttpContext.Current.CurrentHandler;
string url = page.AppRelativeVirtualPath;
这与来自@Markus Olsson的信息一起,即使您不在页面课程中,也可以在执行期间的任何时候访问该页面。
答案 2 :(得分:8)
我使用Request.Url.Segments.Last()
,我觉得它很优雅。
答案 3 :(得分:4)
只是为了兴趣,我用intellisense进行了很少的搜索。没找到任何财产。在其他方面仍然是相同的逻辑。
string currentPageName = System.IO.Path.GetFileName(Request.Url.AbsolutePath);
答案 4 :(得分:1)
正如this earlier question of yours的一个答案所指出的,我会选择一个不需要我创建FileInfo
对象的选项。
在请求的页面和文件系统对象之间并不总是直接映射,尤其是在路由/ URL重写等进行播放时。
答案 5 :(得分:1)
Dim MyPage As String = Path.GetFileName(Page.AppRelativeVirtualPath.ToString).ToString
这一个为我工作
答案 6 :(得分:0)
不是更好,但你可以尝试这种扩展方法:
public static string GetPageName(this Page myPage)
{
FileInfo fi =new FileInfo(myPage.MapPath(myPage.AppRelativeVirtualPath));
return fi.Name;
}
只需在您网页的“OnInit”或其他方法中调用它:
string pageName = this.GetPageName();
马克
答案 7 :(得分:0)
System.IO.Path.GetFileName(Request.PhysicalPath)