C# 可以将ModelBinding与GET请求一起使用吗?
我很好奇是否可以将通过C# 可以将ModelBinding与GET请求一起使用吗?,c#,get,model-binding,C#,Get,Model Binding,我很好奇是否可以将通过GET请求传入的查询字符串绑定到模型 例如,如果GETurl是https://localhost:1234/Users/Get?age=30&status=created 是否可以在GET操作中将查询参数绑定到模型,如下所示: [HttpGet] public async Task<JsonResult> Get(UserFilter filter) { var age = filter.age; var status = filter.sta
GET
请求传入的查询字符串绑定到模型
例如,如果GET
url是https://localhost:1234/Users/Get?age=30&status=created
是否可以在GET
操作中将查询参数绑定到模型
,如下所示:
[HttpGet]
public async Task<JsonResult> Get(UserFilter filter)
{
var age = filter.age;
var status = filter.status;
}
public class UserFilter
{
public int age { get; set; }
public string status { get; set; }
}
[HttpGet]
公共异步任务获取(UserFilter筛选器)
{
var age=filter.age;
var status=filter.status;
}
公共类用户筛选器
{
公共整数{get;set;}
公共字符串状态{get;set;}
}
我目前正在使用
ASP.NET MVC
,我已经做了很多搜索,但我能找到的只有ASP.NET Web API
。他们建议使用[FromUri]
属性,但这在MVC中是不可用的。我刚刚测试了这个属性,它确实有效(至少在.net core 3.1中是这样)
您可以创建ActionFilterAttribute,在其中解析查询参数,并将它们绑定到模型。然后可以用该属性装饰控制器方法。 比如说
public class UserFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
var controller = actionContext.ControllerContext.Controller as CustomApiController;
var queryParams = actionContext.Request.GetQueryNameValuePairs();
var ageParam = queryParams.SingleOrDefault(a => a.Key == "age");
var statusParam = queryParams.SingleOrDefault(a => a.Key == "status");
controller.UserFilter = new UserFilter {
Age = int.Parse(ageParam.Value),
Status = statusParam.Value
};
}
}
CustomApicController(从当前控制器继承)具有UserFilter属性,因此可以将值保留在那里。如果某些查询参数未随请求一起发送,您还可以添加空检查
最后,您可以装饰控制器方法
[HttpGet]
[UserFilter]
public async Task<JsonResult> Get()
{
var age = UserFilter.age;
var status = UserFilter.status;
}
[HttpGet]
[用户过滤器]
公共异步任务Get()
{
var age=UserFilter.age;
var status=UserFilter.status;
}
谢谢-遗憾的是,这在.net 4.6.2中不可用
[HttpGet]
[UserFilter]
public async Task<JsonResult> Get()
{
var age = UserFilter.age;
var status = UserFilter.status;
}