为什么 TimeZoneInfo.FindSystemTimeZoneById("UTC")

我正在尝试为我的 Umbraco V8 包创建一个 APIcontroller。API 工作正常,但我只希望我的后台 AngularControllers 能够访问 API。我希望创建一个如本答案https://stackoverflow.com/a/30573590/11409365中所述的属性。这样只有本地机器可以访问 API。


我认为这不相关,但这是我的 APIController 中的代码


    public class PackageApiController : UmbracoApiController

    {

        [HttpGet]

        public string GetString()

        {

            return "Test";

        }


     }

但是我应该在哪里添加我的 WebApiConfig 类以及如何确保 ApiController 使用这个类?


桃花长相依
浏览 107回答 3
3回答

aluckdog

你是两个不同的结果,因为根据GetSystemTimeZones()TimeZoneInfo.cs的实现将尝试查找和收集时区数据。Registry.LocalMachine在FindSystemTimeZoneById的情况下,它具有如下条件。如果不匹配,它将从Registry.LocalMachine.if (String.Compare(id, c_utcId, StringComparison.OrdinalIgnoreCase) == 0) {     return TimeZoneInfo.Utc; }

慕慕森

答案可在以下参考资料中找到FindSystemTimeZoneById:// Special case for Utc as it will not exist in the dictionary with the rest// of the system time zones.  There is no need to do this check for Local.Id// since Local is a real time zone that exists in the dictionary cacheif (String.Compare(id, c_utcId, StringComparison.OrdinalIgnoreCase) == 0) {    return TimeZoneInfo.Utc;}它所指的字典是从 填充的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones,并且是GetSystemTimeZones返回的内容。但是,我不认为评论和逻辑是正确的,因为我的 Windows 10 build 1803 机器在上述注册表路径中有一个“UTC”条目(假设您的计算机具有相同的条目)。看起来这在早期版本的 Windows 中可能是正确的,但也许不再是这样了 -已在 corefx 存储库中提交错误以获得清晰度。

达令说

这段代码是很久以前写的,在那段时间假设 Utc 没有在机器上枚举,也不会存储在本地字典中。我同意现在情况并非如此。虽然我没有看到这会导致真正的问题,因为两个 Utc 创建的对象都会正确运行,但我认为最好修复它并确保我们使用一个 Utc 对象。@Ian Kemp,感谢您在 corefx 存储库中打开问题。我们将在 .NET Core 的未来版本中处理这个问题。
打开App,查看更多内容
随时随地看视频慕课网APP