Нет, это невозможно при использовании стандартного ASP.NET Core. Думайте о своем контроллере как о любом другом классе. У него есть методы, которые возвращают результаты. Не было бы смысла делать это:
public class DoesSomething
{
public string GetString(string input)
{
HelperMethod();
return "whatever";
}
private void HelperMethod()
{
// Somehow cause the calling method, GetString,
// to return something, circumventing the normal
// control flow.
}
}
По сути, именно так мы и поступили бы, если бы вернули ActionResult
прямо из вспомогательного метода. Это было бы похоже на закрытый метод, который выбирает возвращать результат от имени метода, который его вызвал. Поскольку контроллер такой же, как и любой другой класс, мы не можем этого сделать.
Единственный обходной путь - выбросить исключение из вашего вспомогательного метода. Однако это не рекомендуется, потому что это означает использование исключения для потока управления. Если мы хотим вернуть определенный код состояния, для этого есть методы типа StatusCode(int)
.
Причина, по которой я добавляю квалификатор «использование стандартного ASP.NET Core», заключается в том, что в других версиях вы могли просто выбросить HttpResponseException
из другого метода, и даже в рамках ASP.NET Core люди создавали пользовательские исключения и промежуточное ПО для достижения аналогичный результат. Это было удалено из ASP.NET Core, поскольку сводится к использованию исключений для потока управления. См. Ответ на этот вопрос вместе со ссылкой на другое обсуждение.