【问题标题】:Get the actual last modified date for the requested page in WebForms获取 WebForms 中请求页面的实际最后修改日期
【发布时间】: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


【解决方案1】:

试试下面的代码:

string ASPXphysicalpath = Page.Request.PhysicalPath;
lblLastModified.Text = System.IO.File.GetLastWriteTime(ASPXphysicalpath).ToString();

【讨论】:

  • 感谢您的回复,但Request == Page.Request 返回true,因此您的解决方案在功能上与我已经尝试过的Request.PhysicalPath 相同。
  • @Dragomok PhysicalPath 仅适用于 aspx 更改,如果其后面的 .cs 发生更改,则此日期不会更改。
猜你喜欢
  • 1970-01-01
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
  • 2019-02-26
  • 1970-01-01
  • 2021-11-16
  • 2010-09-17
相关资源
最近更新 更多