C# 使用路由属性时模型为空

C# 使用路由属性时模型为空,c#,asp.net-mvc,asp.net-web-api,routing,C#,Asp.net Mvc,Asp.net Web Api,Routing,在我的WebAPI中,我有一个模型 public class ListRequest { public int Skip { get; set; } = 0; public int Take { get; set; } = 30; } 我的行动是 [HttpGet] [Route("api/users")] public IHttpActionResult Get([FromUri] ListRequest request) { ... } 我需要有可

在我的
WebAPI
中,我有一个模型

 public class ListRequest 
 {
    public int Skip { get; set; } = 0;
    public int Take { get; set; } = 30;
 }
我的行动是

 [HttpGet]
 [Route("api/users")]
 public IHttpActionResult Get([FromUri] ListRequest request) {
    ...
 }
我需要有可能不传递任何查询参数,然后应该使用默认值。但是,当我转到
http://localhost:44514/api/users
请求
为空。如果我删除
[Route(“api/users”)]
请求
不为空,并且具有参数的默认值


如何使用Route属性实现该行为

根据请求创建方法。获取类型始终接收空值

[HttpGet]
[Route("api/users")]
public IHttpActionResult Get([FromUri] ListRequest request) {

}
更改为

[HttpPost]
[Route("api/users")]
public IHttpActionResult Get([FromUri] ListRequest request) {
...
}
因为模型(类)类型参数不支持获取类型请求


希望对您有所帮助。

如果您想使用路由属性初始化模型,请尝试

Route("api/users/{*pathvalue}")]

使用数据注释。欲了解更多信息,请访问

改变

public class ListRequest 
{
    public int Skip { get; set; } = 0;
    public int Take { get; set; } = 30;
}

    public class ListRequest 
    {
        [DefaultValue(0)]
        public int Skip { get; set; }
        [DefaultValue(30)]
        public int Take { get; set; }
    }

它在不删除[Route(“api/users”)]的情况下工作,并且请求将不会为空。

当您没有传递任何查询字符串值时,为什么会有
ListRequest请求
参数?(你也可以在方法中初始化一个新实例)@StephenMuecke当我想使用默认参数值时,我没有传递任何参数。在我添加属性之前,一切正常,但我需要使用该属性。您可以尝试使用[HttpPost]方法将请求中的模型作为参数传递。@DalvinderSingh不,它是GET。用于筛选的模型,有时其他模型可以有5个以上的属性进行筛选。所以我只想用过滤器。我用模型代替了许多动作参数,你们可以在这里找到类似的问题。。我不能改变它。用于筛选的模型,有时其他模型可以有5个以上的属性进行筛选。所以我只想用过滤器。我使用的是模型,而不是动作的许多参数。Get请求不支持模型类型参数。您需要根据请求基础而不是您的需求基础进行更改。为什么?您在哪里发现Get请求不支持模型类型参数。我总是用它。看看这个问题。它可以工作,但只有在没有属性的情况下,您才能看到问题下方的注释。我们已经和达尔文德辛格谈过了。所以你的回答没有帮助。对不起,这对我有用,但我想知道为什么