【发布时间】:2020-11-02 08:12:33
【问题描述】:
我有控制器方法,它有 2 个输入参数:DateTime dFrom, dtTo。
所以,现在我像这样检查间隔:
public async Task<ActionResult> GetValues([FromQuery] DateTime dtFrom, [FromQuery] DateTime dtTo)
{
if (dtFrom > dtTo)
{
return BadRequest($"{nameof(dtFrom)} < {nameof(dtTo)}");
}
}
但是,我想像这样进行验证:
[DateFilterAttribute(dtFrom,dtTo)]
public async Task<ActionResult> GetValues([FromQuery] DateTime dtFrom, [FromQuery] DateTime dtTo)
{
if (dtFrom > dtTo)
{
return BadRequest($"{nameof(dtFrom)} < {nameof(dtTo)}");
}
}
DateFilterAttribute:
public class DateFilterAttribute : ActionFilterAttribute
{
private DateTime _fromDt;
private DateTime _dtTo;
public DateFilterAttribute(DateTime fromDt, DateTime dtTo)
{
_fromDt = fromDt;
_dtTo = dtTo;
}
public override void OnActionExecuting(ActionExecutingContext context)
{
context.HttpContext.Response.StatusCode = 400;
var errorStr = $"{nameof(_fromDt)} < {nameof(_dtTo)}";
context.HttpContext.Response.Headers.Add("Error", new string[] { errorStr });
}
}
但是,我不能在属性中使用输入参数。 那么,我可以这样做吗?这是正确的方式吗?
【问题讨论】:
-
为什么不创建具有
dtFrom和dtTo属性的输入合同并实施IValidatableObject进行日期验证?然后会自动处理400个状态码
标签: c# asp.net-core attributes action-filter