I\'m creating an API using C# and ASP.NET Web API and I want it to return an error when a parameter is used that isn\'t recognised.
For example:
/api/Eve
You could create an ActionFilter
to automate this:
public class InvalidQueryStringRejectorAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
var arguments = actionContext.ActionArguments.Keys;
var queryString = actionContext.Request.GetQueryNameValuePairs()
.Select(q => q.Key);
var invalidParams = queryString.Where(k => !arguments.Contains(k));
if (invalidParams.Any())
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.BadRequest, new
{
message = "Invalid query string parameters",
parameters = invalidParams
});
}
}
}
That filter will reject any request with query string parameters that do not match the method signature.
You may use it like this:
[InvalidQueryStringRejector]
public IHttpActionResult Get(string value)
{
return Ok(value);
}
Or apply to any action by registering it inside your HttpConfiguration
object:
config.Filters.Add(new InvalidQueryStringRejectorAttribute());