ASP.net web api 2错误"参数字典包含参数"的空条目

本文关键字:参数 quot 包含 字典 net 错误 api ASP web | 更新日期: 2023-09-27 18:03:57

我有这样的路由配置:

   routes.MapHttpRoute("DefaultApi2", "api/{controller}/{action}/{id}", new {id = RouteParameter.Optional}

我的控制器是这样的:

  public class RoutineController : ApiController
{
    private readonly RoutineService _routineService;
    public RoutineController(RoutineService routineService)
    {
        _routineService = routineService;
    }

    [HttpGet]
    [ActionName("Tags")]
    public List<RoutineTag> Tags()
    {
        return _routineService.GetAllTags();
    }
    [HttpGet]
    [ActionName("SingleRoutine")]
    // GET api/routine/5
    public RoutineViewModel SingleRoutine(int id)
    {
        return _routineService.GetRoutineById(id);
    }
}

但是我得到这个错误:

{"Message":"The request is invalid.","MessageDetail":"The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'Infrastructure.Api.Models.RoutineViewModel Routine(Int32)' in 'Infrastructure.Api.Controllers.RoutineController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter."}

如果我将SingleRoutine方法更改为:

    [HttpGet]
    [ActionName("SingleRoutine")]
    // GET api/routine/5
    public RoutineViewModel SingleRoutine(int? id)
    {
        if (!id.HasValue)
        {
            return null;
        }
        return _routineService.GetRoutineById((int) id);
}

在浏览器中我只看到"null"

为什么会这样?

编辑

当我输入/api/routine/tags

ASP.net web api 2错误"参数字典包含参数"的空条目

时显示此错误

我相信这是WebApiConfig的问题,我有这些行:

config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new {id = RouteParameter.Optional}
            );
        config.Routes.MapHttpRoute("CustomApi", "{controller}/{action}/{id}", new {id = RouteParameter.Optional}
            );

和Route Config

 routes.MapHttpRoute("DefaultApi2", "api/{controller}/{action}/{id}", new {id = RouteParameter.Optional}

现在在WebApiConfig我有:

 config.Routes.MapHttpRoute("CustomApi", "api/{controller}/{action}/{id}", new { id = RouteParameter.Optional }
         );
        config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new {id = RouteParameter.Optional}
            );

And In RouteConfig:

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

它有效!

for api/{controller}/{action}/{id} route URL api/routine/5查找不存在的function (action) 5

更新:

你的错误消息有失败的原因:一个可选参数必须是一个引用类型,一个可空类型,或者被声明为一个可选参数。"}

int是不可空的,所以当你不提供它的值时,它无法创建id。

使用基于约定的路由(安装nuget包)

在你的web api中添加以下类型路由

[Route("api/routine/{id}")]
相关文章: