使用ServiceStack.Razor的ViewPage上出现System.TimeZoneNotFoundExcep

本文关键字:System TimeZoneNotFoundExcep ViewPage ServiceStack Razor 使用 | 更新日期: 2023-09-27 18:28:53

我已经使用Servicestack.Razor创建了一个视图。在视图页面上,我试图使用以下代码获取会话。

var session = GetSession<AuthUserSession>().ToJson();

当我把这个代码放在视图页面上时,我得到以下错误:

System.TimeZoneNotFoundException
Exception of type 'System.TimeZoneNotFoundException' was thrown.
Description: HTTP 500.Error processing request.
Details: Non-web exception. Exception origin (name of application or object): mscorlib.

StackTrace如下:

Exception stack trace:
      at System.TimeZoneInfo.get_Local () [0x00000] in <filename unknown>:0 
      at ServiceStack.Text.Common.DateTimeSerializer..cctor () [0x00000] in <filename unknown>:0 

这是Servicestack.Text中的错误吗?我该如何解决这个问题?

注意:我在Ubuntu 12.10 上使用Mono 3.0.10

我在处理一个项目时也遇到了同样的错误。在我的情况下,这是因为我没有正确导出的TZ环境变量。我不得不将以下内容添加到我的UI init shell脚本中:

read TZ 2>/dev/null < /etc/timezone
export TZ

使用ServiceStack.Razor的ViewPage上出现System.TimeZoneNotFoundExcep

Mono有一个已知的&影响Windows的长期时区错误,但只要时区数据库安装在/usr/share/zoneinfo,它就应该在Linux中工作。然而,如果我试图序列化日期,这与我在Windows中遇到的错误完全相同,所以这会让我认为出于某种原因,/usr/share/zoneinfo不合适。

如果没有,注释6中的解决方法可能会对您有所帮助。但我认为你必须求助于构建ServiceStack.文本,这样你就可以应用变通方法。

在/usr/share/zoneinfo中创建一个符号链接可能更容易,该链接指向实际安装的位置。

.NET Core在与时区相关的操作中遵循操作系统,不幸的是,Windows和Linux有不同的时区名称。如果需要,请使用TimeZoneConverter在它们之间进行转换。

if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
    timeZoneName = TZConvert.WindowsToIana(timeZoneName);
}
var zoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName);