我使用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
答案 0 :(得分:1)
我在处理项目时遇到了同样的错误。在我的情况下,这是因为我没有正确导出的TZ环境变量。我不得不将以下内容添加到我的UI init shell脚本中:
read TZ 2>/dev/null < /etc/timezone
export TZ
答案 1 :(得分:0)
Mono有一个已知的&amp;长期Timezone bug that affects Windows但只要TimeZone数据库安装在/ usr / share / zoneinfo,它就应该在Linux中运行。但是,如果我尝试序列化日期,那就是我在Windows中遇到的完全相同的错误,因此这会让我认为由于某种原因,/ usr / share / zoneinfo不合适。
如果不存在,Comment 6中的解决方法可能会对您有所帮助。但后来我相信您必须从源代码构建ServiceStack.Text,以便您可以应用解决方法。
在/ usr / share / zoneinfo上创建符号链接可能更容易,该链接指向 的安装位置。
答案 2 :(得分:0)
.NET Core遵循操作系统进行与时区相关的操作,不幸的是,Windows和Linux具有不同的时区名称。如果需要,请使用TimeZoneConverter在它们之间进行转换。
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
timeZoneName = TZConvert.WindowsToIana(timeZoneName);
}
var zoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName);