参数字典包含参数的空条目,但参数存在

本文关键字:参数 存在 字典 包含 | 更新日期: 2023-09-27 18:37:04

我的控制器中有一个简单的方法 - GetMeterProfileData with 1 参数 - 仪表ID

public class AlertsDashboardController : Controller
{
    public ActionResult GetMeterProfileData(int meterID)
    {
        List<IMeterProfileData> result = new List<IMeterProfileData>();
        {
            if (meterID == 1)
            {
                result.Add(new MeterProfileData() {PeriodDateTime = Convert.ToDateTime("01/01/2000 00:00"), Consumption = 102});
                result.Add(new MeterProfileData() {PeriodDateTime = Convert.ToDateTime("31/01/2000 00:30"), Consumption = 12});
            }
            else
            {
                result.Add(new MeterProfileData() {PeriodDateTime = Convert.ToDateTime("01/01/2004 00:00"), Consumption = 500});
                result.Add(new MeterProfileData() {PeriodDateTime = Convert.ToDateTime("31/01/2004 00:30"), Consumption = 445});
            }
        }
        return Json(result, JsonRequestBehavior.AllowGet);
    }

}

我正在使用网址

http://localhost:54728/AlertsDashboard/GetMeterProfileData/2

如您所见,正在指定 MeterID

那为什么我会收到错误

参数

字典包含参数的空条目 方法的不可为空类型"System.Int32"的"meterID" 'System.Web.Mvc.ActionResult GetMeterProfileData(Int32)' in 'STC。MVC.Web.Controllers.AlertsDashboardController'.一个可选的 参数必须是引用类型、可为 null 的类型或声明为 可选参数。

我的路由设置如下

我是否必须为此方法添加新路由? 这样做没有多大意义,因为我必须潜在地设置大量路由。

 public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new {id = RouteParameter.Optional}
            );
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional}
            );           
    }

我还尝试添加一条新路线,如下所示,但这也没有用

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

我错过了什么?

保罗

参数字典包含参数的空条目,但参数存在

参数名称很重要,使用默认路由时必须id参数名称。您需要将方法签名更新为

public ActionResult GetMeterProfileData(int id)

或者使用正确的参数名称定义不同的路由:

routes.MapRoute(
        name: "Default2",
        url: "{controller}/{action}/{meterID}",
        defaults: new { controller = "AlertsDashboard", action = "Index", meterID = UrlParameter.Optional }
        );