【发布时间】:2016-11-05 19:33:48
【问题描述】:
我想将当前查看的页面(负责的.aspx 文件)的最后修改日期放入 Web 窗体站点的页脚中。
我正在使用 Visual Studio 2015 的默认 Web 表单模板并为 .NET 4.5 构建项目。在Site.Master 中,我修改了页脚,如下所示:
<footer>
<p>
Page last updated on:
<asp:Label ID="modyfikacja" runat="server" Text="coś nie poszło" />
</p>
</footer>
并修改Site.Master.cs 中的Page_Load() 方法,如下所示:
protected void Page_Load(object sender, EventArgs e)
{
string _site = Server.MapPath(HttpContext.Current.Request.Url.AbsolutePath);
modyfikacja.Text = "(" + _site + ") " + File.GetLastWriteTime(_site).ToString();
}
不幸的是,这实际上并没有真正起作用:
- 当我转到
http://localhost:11111时,它会正确返回文件路径C:\imaginelikeapathheredude\default.aspx的日期, - 但是当我转到
http://localhost:11111/About时,它会尝试获取文件路径C:\imaginelikeapathheredude\About的日期 - 即。 web 路由粘贴到物理根目录,而不是路由后面的C:\imaginelikeapathheredude\about.aspx文件, - (
http://localhost:11111/contact.aspx重定向到http://localhost:49480/contact并且不会更改此问题中提到的任何函数的输出)。
有很多替代解决方案来获取文件,在整个网络(以及 StackOverflow 上)都提出了建议,但它们也都不起作用。如果我将_site 变量更改为...
-
Request.PhysicalPath,没有任何变化。 -
Server.MapPath(HttpContext.Current.Request.Url.AbsolutePath),没有任何变化。 -
Server.MapPath(HttpContext.Current.Request.ServerVariables.Get("SCRIPT_NAME")),没有任何变化。 -
HttpContext.Current.Request.ServerVariables.Get("PATH_TRANSLATED"),没有任何变化。 -
HttpContext.Current.Request.ServerVariables.Get("SCRIPT_TRANSLATED"),我得到完全相同的文件路径,但前面有\\?\,应用程序崩溃,因为规范路径不是有效的文件路径。 -
Server.MapPath(Request.Url.LocalPath.ToString()),没有任何变化。
那么 - 我究竟怎样才能获得 .aspx 文件?
PS。有a somewhat similar question,但它似乎简短、含糊且措辞不佳 - SO 的类似问题 我认为这是关于获取.aspx 文件,而它的两个答案认为是关于获取 URL。
【问题讨论】:
-
这可能不够通用,但可能:
MyFile = Server.MapPath(Request.ApplicationPath + "//sample1.aspx"); -
@wazz 附加
.aspx是一个明显的解决方法,但我很想知道如果我对路线做任何事情,是否有办法检查不会分开的日期。特别是因为我们知道框架知道文件 - 也就是说,否则它将无法生成页面。
标签: asp.net webforms last-modified