使用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
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);