Проверьте необязательные параметры и подтвердите соответственно
[HttpGet("{source}")]
public ActionResult<IEnumerable<string>> Get(
string source,
[FromQuery] string year,
[FromQuery] string genre) {
if(string.IsNullOrEmpty(year) && string.IsNullOrEmpty(genre))
return BadRequest();
//...
}
В противном случае вам потребуется специальный фильтр, который проверяет строки запроса
[ProducesResponseType(400)]
public class ValidateQueryStringStateAttribute : ActionFilterAttribute {
public override void OnActionExecuting(ActionExecutingContext context) {
var query = context.Request.Query;
if(!query.ContainsKey("year") && !query.ContainsKey("genre"))
context.ModelState.AddModelError("", "At least year or genre required");
if (!context.ModelState.IsValid) {
var result = new Dictionary<string, string>();
foreach (var key in context.ModelState.Keys) {
result.Add(key, String.Join(", ", context.ModelState[key].Errors.Select(p => p.ErrorMessage)));
}
// 400 - Bad Request
context.Result = new ObjectResult(result) { StatusCode = 400 };
}
}
}
И используется в действии
[HttpGet("{source}")]
[ValidateQueryStringState]
public ActionResult<IEnumerable<string>> Get(
string source,
[FromQuery] string year,
[FromQuery] string genre) {
//...
}