我将一个小型MVC 5网站移植到MVC 6,以发现重大变化。东西正在破碎。
MVC 5代码使用@File.GetLastWriteTime(this.Server.MapPath(this.VirtualPath))
来获取时间戳,如建议的here。显然在MVC 6中,.cshtml页面不再有Server
或VirtualPath
个成员。什么是新咒语?
答案 0 :(得分:3)
18个月后重新审视我自己的问题......框架现在是ASP.NET Core 2.0 MVC,似乎框架,文档和最佳实践都有所改变。
您应该使用MS docs中所述的FileProvider。在这里重新创建这篇文章毫无意义,但请务必:
services.AddSingleton(HostingEnvironment.ContentRootFileProvider);
注册IFileProvider服务,也在文档中描述然后实际获得最后修改日期,控制器将如下所示:
public class HomeController : Controller
{
private IFileProvider _fileProvider;
public HomeController(IFileProvider fileProvider)
{
_fileProvider = fileProvider;
}
public IActionResult Index()
{
DateTimeOffset lastModifiedDate = _fileProvider.GetFileInfo(@"Views\Home\Index.cshtml").LastModified;
// use it wisely...
return View();
}
答案 1 :(得分:0)
您可以从ApplicationBasePath
服务获得IApplicationEnvironment
。
private readonly IApplicationEnvironment _env;
public FileController(IApplicationEnvironment appEnv)
{
_env= appEnv;
}
public IActionResult Index()
{
var myModel = _env.ApplicationBasePath;
return View(myModel);
}
然后你可以像这样进行自己的路径计算:
public IActionResult Index()
{
var myFileVirtualPath = "/ab/c.d"
var myModel = Path.Combine(_env.ApplicationBasePath, myFileVirtualPath);
return View(myModel);
}
答案 2 :(得分:0)
@PaulWilliam举动的替代解决方案
如果出于某种原因无法使用文件提供程序,则可以使用System.IO.File
静态类及其方法GetLastWriteTime
或GetLastWriteTimeUtc
来获取文件的上次修改日期。返回DateTime
obj:
DateTime lastModified = System.IO.File.GetLastWriteTimeUtc(filePath);
请注意,非utc方法GetLastWriteTime
返回基于服务器/文件系统时间的上次修改日期。
除此之外,System.IO.File
还包含所有有助于检索数据(如上次访问时间,创建时间等)的方法。不仅是getter方法,还有setter方法。
还值得指出的是,您可以使用GetAttributes
/ SetAttributes
方法来处理FileAttributes
枚举,这些枚举用于将文件状态定义为Hidden
,{{ 1}}等。
文档:File.GetAttributes(String) Method - MS Docs和FileAttributes Enum - MS Docs
答案 3 :(得分:-2)
@(新的System.IO.FileInfo(新的Microsoft.Extensions.FileProviders.PhysicalFileProvider(Environment.CurrentDirectory).GetFileInfo(this.Path).PhysicalPath).CreationTime)