在.NETMVC控制器中需要可为null的参数,即使这些参数总是用值调用

在.NETMVC控制器中需要可为null的参数,即使这些参数总是用值调用,.net,asp.net-mvc-4,.net,Asp.net Mvc 4,因此,我的web应用程序总是让主机关闭池,并出现503个错误(可能是快速故障)。我的主人寄给我这篇文章 ^? Exception type: ArgumentException ^? Exception message:^?The parameters dictionary contains a null entry for parameter 'pageNum' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.Ac

因此,我的web应用程序总是让主机关闭池,并出现503个错误(可能是快速故障)。我的主人寄给我这篇文章

^? Exception type: ArgumentException 
^? Exception message:^?The parameters dictionary contains a null entry for parameter 'pageNum' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult AjaxFetch(Int32, Int32)' in 'Frontend.Controllers.BlogController'. An optional para
这个方法的签名是

(上面没有属性,可以用get调用)

现在这一切都很简单,我可以简单地将int改为int?瞧。我就是这么做的。我的问题是出于好奇。为什么它失败了,因为我只在js/jquery中使用参数集调用过这个函数。因此,代码总是有效的。但在背景中显然产生了错误。这是为什么。没有人用null调用它,但它却失败了

最后,我将包括我的路线,这样就没有故障,这里是我的两条路线,我没有别的

        routes.MapRoute(
            name: "stalkSaveOld",
            url: "geoshare",
            defaults: new { controller = "Stalk", action = "SaveCoordinate" }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Blog", action = "Index", id = UrlParameter.Optional }
        );
顺便说一句,AjaxFetch在BlogController中

为什么它失败了,因为我只在js/jquery中使用参数集调用过这个函数

我猜是别的什么东西(机器人?)在不包含所有参数的情况下调用它


我建议暂时将其更改为使用可为null的类型,但如果在记录诊断信息(用户代理、客户端IP地址、完整请求URL)后检测到其中一个值为null,则会出现错误。

我在考虑robot,但事情是这样的。我们正在开发这个页面。机器人找到url的几率并不是很高。它已在当前域中运行不到3天(并立即开始失败)。但我想一切皆有可能。我现在做了nullable来解决它。我只是好奇,是否有一个原因我没有看到为什么它失败。@RickardLiljeberg:好奇当然是件好事——希望通过添加更多的诊断,你会发现原因:)
        routes.MapRoute(
            name: "stalkSaveOld",
            url: "geoshare",
            defaults: new { controller = "Stalk", action = "SaveCoordinate" }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Blog", action = "Index", id = UrlParameter.Optional }
        );