4

我有带有 2 种操作方法的 webapi 控制器,如下所示:

public List<AlertModel> Get()
{
    return _alertService.GetAllForUser(_loginService.GetUserID());
}

public AlertModel Get(int id)
{
    return _alertService.GetByID(id);
}

但是,当我向我提出请求时,api/alerts出现以下错误:

参数字典包含“ekmSMS.Web.Api.AlertsController”中方法“ekmSMS.Common.Models.AlertModel Get(Int32)”的不可为空类型“System.Int32”的参数“id”的空条目。可选参数必须是引用类型、可空类型或声明为可选参数。

我在中设置了以下路线global.asax

routes.MapHttpRoute("Api", "api/{controller}/{id}", new { id = UrlParameter.Optional });

这种类型的重载应该有效吗?如果应该我做错了什么?

编辑

虽然这个问题是关于 WebAPI 的,但控制器是 MVC3 项目的一部分,这些是另一个MapRoutes

routes.MapRoute("Templates", "templates/{folder}/{name}", new { controller = "templates", action = "index", folder = "", name = "" });    
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "app", action = "index", id = UrlParameter.Optional });
4

1 回答 1

12

问题是您使用UrlParameter.Optional(这是一种 ASP.NET MVC 特定类型)而不是RouteParameter.Optional. 如下更改您的路线,然后它应该可以工作:

GlobalConfiguration.Configuration.Routes.MapHttpRoute(
    "Api",
    "api/{controller}/{id}",
    new { id = RouteParameter.Optional }
);
于 2012-08-03T12:40:36.560 回答