![](/img/trans.png)
[英]MaxRequestSize attribute not stopping request aspnet dotnet core 3
[英]How do I create a custom api parameter validation attribute which returns bad request on aspnet core 3?
我的 controller 中有以下端點,我想為從查詢傳遞的屬性創建自定義驗證。
[ApiController]
public class SampleController : ControllerBase
{
[HttpGet]
[Route("api/user")]
public IActionResult GetUsersByLevel(
[BindRequired, ValidLevelFromQuery(Name = "level")] string level)
{
...
}
}
我想要的結果是我創建了一個自定義FromQuery
屬性,在此示例中我將其描述為ValidLevelFromQuery
。 自定義屬性將檢查level
的值,並且只接受"A", "B", and "C"
,對於任何其他值,對客戶端的響應將是BadRequest
。
目前,我在讀取操作中的值后進行驗證。 我的目標是在請求管道中更早地進行此檢查。
如果可能,我想避免使用IValidatableObject
。
您可以使用ActionFilter
來實現這一點。
請參考以下代碼:
[HttpGet]
[Route("api/user")]
[ValidLevelFromQuery]
public IActionResult GetUsersByLevel(
[BindRequired] string level)
{
return Ok();
}
ValidLevelFromQuery 方法:
public class ValidLevelFromQueryAttribute : ActionFilterAttribute
{
/// <summary>
/// Validates Level automaticaly
/// </summary>
/// <param name="context"></param>
/// <inheritdoc />
public override void OnActionExecuting(ActionExecutingContext context)
{
if (context.ActionArguments.ContainsKey("level"))
{
string[] allowedGroup = new string[] { "A", "B", "C" };
if (!allowedGroup.Contains(context.ActionArguments["level"]))
{
context.Result = new BadRequestObjectResult("The level is not allowed");
}
}
}
這是測試結果:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.