我在名为“服务”的区域内有以下控制器:
namespace Web.Areas.Service.Controllers
{
public class IntervalController : Controller
{
//
// GET: /Service/Interval/
public JsonResult Monitor(String accountId, int datekey)
{
//...
}
}
}
网址
http://localhost/Web/Service/Interval/Monitor?accountid=123&datekey=123
正在返回ASP.net错误:
"The parameters dictionary contains a null entry for parameter 'accountId' of non-nullable type 'System.Guid' for method 'System.Web.Mvc.JsonResult Monitor(System.Guid, Int32)'"
如何设置路由以将参数正确传递给控制器?
答案 0 :(得分:1)
它说你有一个guid,你可能有另一个覆盖,或者你是否为一个定义为Monitor的方法指定了一个动作名称属性?
答案 1 :(得分:1)
也许您需要添加Global.asax :(下一行是在VB中,但它几乎相同)
routes.MapRoute( _
"Monitor", _
"{controller}/{action}/{accountId}/{datekey}", _
New With {.controller = "Home", .action = "Index", .accountId = UrlParameter.Optional, .datekey = UrlParameter.Optional})
查看参数是可选的,以便您可以传递字符串,长整数或任何数据类型。我更喜欢不为每个动作编写MapRoute,因此请尝试标准化
routes.MapRoute( _
"WhatEver", _
"{controller}/{action}/{parameter1}/{parameter2}", _
New With {.controller = "Home", .action = "Index", .parameter1 = UrlParameter.Optional, .parameter2 = UrlParameter.Optional})
因此,无论数据类型如何,您都可以将其用于其他操作,但重要参数的数量。
答案 2 :(得分:0)
我看起来你有另一个匹配的动作重载而不是你问题中的那个,因为你当前的网址在尝试匹配System.Web.Mvc.JsonResult Monitor(System.Guid, Int32)
时出错,这显然不是你想要的动作。 / p>
public JsonResult Monitor(Guid accountid, int datekey)
{
//...
}
如果没有真正看到你的路线,就很难确切地知道出了什么问题。但是,您应该在URL中更改的一件事是使accountid
成为accountId
以匹配Monitor操作中参数的大小写。这将使您的新网址如下:
http://localhost/Web/Service/Interval/Monitor?accountId=123&datekey=123