我有一个 ApiController - 例如“Home”控制器,其操作“Test”接受两个参数 - test1 和 test2,两者都具有默认值
[System.Web.Http.HttpGet]
public ActionResult Test(int test1 = 3, int test2 = 5)
{
var a = 0;
return null;
}
现在当我打电话时家/测试?test1=1, 一切都好。
但当我打电话时主页/测试?test1=1&,服务器抛出异常
参数字典包含方法的不可空类型“System.Int32”的参数“test2”的空条目
'System.Web.Mvc.ActionResult 测试(Int32,Int32)'
'TestAPI.Controllers.ValuesController'。可选参数必须是
引用类型、可为 null 的类型或声明为可选类型
范围。
目前我的路由配置是这样的:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
这也发生在一个全新的 WebApi 项目上,所以它不是我的配置中的内容。
最大的问题是这个&符号来自客户项目,我无法在那里更改它,尽管我知道这是一个糟糕的请求。
最奇怪的是,如果 Home 控制器继承 Controller 而不是 ApiController - 一切都很好。
Edit 1
我忘了提及,如果我将参数设为可为空(即 int?),则错误就会消失,但在调用错误 URL 时 test2 的值为 null 而不是 5,因此这对我来说不是一个选择。