访问Web API中的类时出现异常

本文关键字:异常 Web API 访问 | 更新日期: 2023-09-27 18:06:57

我遇到了一个奇怪的行为。我的Web API突然不能使用了,因为这个异常:

[ArgumentNullException: Value cannot be null.
Parameter name: String]
   System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) +14198596
   System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) +177
   Dota2IoT.Server.Models.ViewModels.NatMappingManager..cctor() +112
[TypeInitializationException: The type initializer for 'Dota2IoT.Server.Models.ViewModels.NatMappingManager' threw an exception.]
   Dota2IoT.Server.MvcApplication.Application_Start() +223

这是NapMappingManager的构造函数:

    private ConcurrentDictionary<int, NatMappingViewModel> mappings;
    private NatMappingManager()
    {
        this.mappings = new ConcurrentDictionary<int, NatMappingViewModel>();
    }

以前,我甚至没有从全局调用NapMappingManager。asax Application_Start,但我认为这可能是因为一些并发的。但是,现在我试着调用:

// Initialize the NAT
Models.ViewModels.NatMappingManager.Instance.ToString()
因此可以调用构造函数,但会发生相同的错误。有什么问题吗?我对代码做了什么,还是ConcurrentDictionary的错误?

编辑:在我的本地机器上没有发生异常。它只发生在我的Azure VM (windows Server 2012)服务器上。

编辑以澄清正确答案:

这是导致问题的代码(我没有显式的静态构造函数):

    private static readonly int MaxDeviceNumber = int.Parse(ConfigurationManager.AppSettings["MaxDeviceNumber"]);
    private static readonly int MinDeviceNumber = int.Parse(ConfigurationManager.AppSettings["MinDeviceNumber"]);

访问Web API中的类时出现异常

.cctor静态构造函数。这与您有类型初始化异常的事实相符。看起来你试图在NatMappingManager的静态构造函数中解析int,但是你传递给它的值是null

(如果没有显式的静态构造函数,请在声明的同一行中查找初始化的静态成员)