Обычный способ сделать это - иметь вспомогательный класс, который возвращает результат проверок и / или операций в контроллер:
public class ValidationResult
{
public bool Succeeded { get; set; }
public string Message { get; set; }
public int StatusCode { get; set; }
}
Поскольку вопрос помечен с помощью ASP.NET Core, правильный способ сделать это - сначала создать интерфейс:
public interface IRequestValidationService
{
ValidationResult ValidateToken(string token);
ValidationResult ValidateData(object data);
}
Затем создайте реализацию:
public class RequestValidationService : IRequestValidationService
{
public ValidationResult ValidateToken(string token)
{
if (string.IsNullOrEmpty(token) || token != "1234")
{
return new ValidationResult
{
Succeeded = false,
Message = "invalid token",
StatusCode = 403
};
}
return new ValidationResult { Succeeded = true };
}
...
}
Добавьте его в контейнер DI (в классе запуска):
services.AddScoped<IRequestValidationService, RequestValidationService>();
Вставьте его в SomethingController:
public SomethingController(IRequestValidationService service)
{
_requestValidationService = service;
}
И, наконец, используйте его:
public IActionResult GetSomething(SomethingRequest request)
{
var validationResult = _requestValidationService.ValidateToken(request?.Token);
if (!validationResult.Succeeded)
{
return new StatusCode(validationResult.StatusCode, validationResult.Message);
}
}
Обратите внимание, что для чего-то столь же тривиального, как проверка того, что что-то не является нулевым, вы должны использовать проверку модели:
public class SomethingRequest
{
[Required(ErrorMessage = "Something is required, check your data")]
public SomethingModel Something { get; set; }
[Required(ErrorMessage = "Token is required!")]
public string Token { get; set; }
}