2

我使用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

4

3 回答 3

1

我在做一个项目时遇到了同样的错误。就我而言,这是因为我没有正确导出的 TZ 环境变量。我必须将以下内容添加到我的 UI 初始化 shell 脚本中:

read TZ 2>/dev/null < /etc/timezone
export TZ
于 2016-02-09T22:17:55.323 回答
0

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

如果它不存在,评论 6中的解决方法可能会对您有所帮助。但是我相信您必须求助于从源代码构建 ServiceStack.Text 以便您可以应用解决方法。

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

于 2013-10-24T23:26:05.143 回答
0

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

if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
    timeZoneName = TZConvert.WindowsToIana(timeZoneName);
}
var zoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName);
于 2018-05-03T09:13:55.117 回答