Шаблонный шаблон - это путь в подобных ситуациях.Не связано с проверкой, хотя.И вы должны позаботиться о зависимости контроллера тоже.Обратите внимание, что приведенный ниже код не будет работать автоматически без некоторых изменений.
public abstract class BaseSearch
{
public Task<IActionResult> Apply(AggregateSearchCriteria criteria)
{
if (criteria == null || !criteria.Aggregates.Any())
{
return BadRequest();
}
var providers = Request.Headers["providers"];
if (providers.Equals(StringValues.Empty))
return BadRequest();
criteria.Providers = providers.ToString().Split(',').ToList();
ModelState.Clear();
TryValidateModel(criteria);
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var result = await ServiceCall(criteria);
return Ok(result);
}
protected abstract async IActionResult ServiceCall(AggregateSearchCriteria criteria);
}
public class Search : BaseSearch
{
protected async Task<IActionResult> ServiceCall(AggregateSearchCriteria criteria)
{
return await _searchService.Search(criteria);
}
}
public class SearchRuleBreak : BaseSearch
{
protected async Task<IActionResult> ServiceCall(AggregateSearchCriteria criteria)
{
return await _searchService.SearchRuleBreak(criteria);
}
}
Затем при вызове:
[HttpPost]
public async Task<IActionResult> Search([FromBody]AggregateSearchCriteria criteria)
{
return await new Search().Apply(criteria);
}
[HttpPost("rulebreak")]
public async Task<IActionResult> SearchRuleBreak([FromBody]AggregateSearchCriteria criteria)
{
return await new SearchRuleBreak().Apply(criteria);
}
Примечание: Поскольку языки становятся все больше и большеФункциональность сегодня, подход «функция отправки как параметр» - тоже правильный путь, как предлагает @stuartd.