C# 如何在.Net核心API中的自定义操作筛选器中传递模型
这是我的控制器。在执行操作方法之前,我需要验证输入参数。操作方法接受Json对象,但在方法内部,我们将其转换为模型对象。是否可以在我的自定义操作筛选器中验证作为模型对象的输入?ValidateParamFilterAttribute是我的自定义筛选器类,它应该接受动作方法作为参数。它应该是泛型的,所以我不需要对我应用程序中的每个动作方法重复它C# 如何在.Net核心API中的自定义操作筛选器中传递模型,c#,validation,asp.net-core-webapi,action-filter,C#,Validation,Asp.net Core Webapi,Action Filter,这是我的控制器。在执行操作方法之前,我需要验证输入参数。操作方法接受Json对象,但在方法内部,我们将其转换为模型对象。是否可以在我的自定义操作筛选器中验证作为模型对象的输入?ValidateParamFilterAttribute是我的自定义筛选器类,它应该接受动作方法作为参数。它应该是泛型的,所以我不需要对我应用程序中的每个动作方法重复它 public class InputValidationController : ApiController { [HttpPo
public class InputValidationController : ApiController
{
[HttpPost][ValidateParamFilter(typeof(Users))]
public string SaveData([FromBody]JObject testdata )
{
}
}
我的自定义操作筛选器:
public class ValidateParamFilterAttribute: Attribute , IActionFilter
{
public ValidateParamFilterAttribute(Type type) {
//not able to proceed here
// the type parameter will take my modal classes.in this case it should be Users
}
public override void OnActionExecuting(HttpActionContext actionContext)
{
}
}
模型类:
public class Users
{
[Required(ErrorMessage ="Id field is mandatory")]
public int id { get; set; }
[Required][StringLength(10,ErrorMessage ="Name length can't be more than 10")]
public string Name { get; set; }
[Required][Phone][MaxLength(10)]
public string PhoneNumber { get; set; }
[Required][EmailAddress]
public string Email { get; set; }
}
是否可以在自定义操作筛选器中将输入作为模型对象进行验证
如果您希望根据收到的action argumenttestdata
的值生成模型类Users
的实例,并在action filter中手动执行模型验证,则可以参考以下代码段
操作过滤器的OnAction执行方法
UsersController和SaveData操作
测试结果
1) 无效
2) 有效的
是否可以在自定义操作筛选器中将输入作为模型对象进行验证
如果您希望根据收到的action argumenttestdata
的值生成模型类Users
的实例,并在action filter中手动执行模型验证,则可以参考以下代码段
操作过滤器的OnAction执行方法
UsersController和SaveData操作
测试结果
1) 无效
2) 有效的
关于这个案例有什么更新吗?你达到要求了吗?关于这个案例有什么更新吗?你达到要求了吗?而是阅读每个属性并创建对象。您可以使用JObject.ToObject();我对这个答案投了赞成票,因为它让我找到了TryValidateModel(),这正是我在寻找对来自JObject的反序列化对象应用模型验证的东西,非常感谢。而不是阅读每个属性并创建对象。您可以使用JObject.ToObject();我对这个答案投了赞成票,因为它让我找到了TryValidateModel(),这正是我在寻找对来自JObject的反序列化对象应用模型验证的东西,非常感谢。
public void OnActionExecuting(ActionExecutingContext context)
{
var jobj = context.ActionArguments["testdata"] as JObject;
var users = new Users
{
id = (int)jobj["id"],
Name = (string)jobj["name"],
PhoneNumber = (string)jobj["phoneNumber"],
Email = (string)jobj["email"]
};
var isvalid = (context.Controller as UsersController).TryValidateModel(users, nameof(Users));
if (!isvalid)
{
//...
//code logic here
//...
[ApiController]
public class UsersController : ControllerBase
{
[HttpPost("SaveData")]
[ValidateParamFilter(typeof(Users))]
public IActionResult SaveData([FromBody]JObject testdata)
{
//...