拒绝包含未知查询参数的请求?

时间:2019-04-01 09:00:13

标签: c# asp.net-core .net-core

使用ASP.NET Core MVC,是否可以为包含请求参数的HTTP请求返回BadRequest的HTTP请求,而该查询参数不是控制器使用的

我不是要针对存在的某些特定查询参数返回错误,而是要拒绝所有包含服务器未解析为有意义的查询参数的请求。

因此,换句话说,没有有效的查询参数是可以的,但对于无效/无法识别的查询参数则不能。

1 个答案:

答案 0 :(得分:1)

您可以使用action filter获取操作parameters和请求查询字符串queryParameters。然后判断查询参数是否全部在操作中使用。

public override void OnActionExecuting(ActionExecutingContext context)
    {

        var parameters = context.ActionDescriptor.Parameters;
        var queryParameters = context.HttpContext.Request.Query;

        if (queryParameters.Select(kvp => kvp.Key).All(queryParameter => parameters.Any(p => p.Name == queryParameter)))
        {
            base.OnActionExecuting(context);
        }
        else
        {
            context.Result = new BadRequestObjectResult("Querystring does not match");
        }

    }

在控制器中:

[TypeFilter(typeof(TestQueryActionFilter))]
public void MyAction(int id, string name)