Будучи новичком в ASP.NET MVC, мне было интересно узнать о сигнатуре методов Controller. Во всех примерах, которые я видел, они всегда возвращают ActionResult, даже если они действительно возвращают экземпляр ViewResult или аналогичный.
Вот наиболее распространенный пример:
public ActionResult Index()
{
return this.View();
}
В таком случае, не имеет ли больше смысла объявить метод как public ViewResult Index()
и получить более сильную поддержку типов?
Эксперименты показывают, что это работает, так что это кажется возможным.
Я понимаю, что могут быть ситуации, когда желателен полиморфизм (например, если вы хотите перенаправить только в определенных ситуациях, но показать представление в других ситуациях), но если метод всегда возвращает Я бы посчитал ViewResult более желательным.
С точки зрения будущей совместимости, ActionResult, очевидно, обеспечивает более надежную сигнатуру, но если кто-то контролирует всю кодовую базу, всегда можно изменить сигнатуру метода на более общий тип возврата, если это станет необходимым в будущем.
Есть ли какие-либо другие соображения, о которых я не знаю, или я должен просто пойти дальше и объявить методы моего контроллера с определенными типами возврата?