Это потому, что ваш возвращаемый тип OkObjectResult
наследует ActionResult
. Возвращенный дочерний класс не влияет на компиляцию родительского класса. Это сделано намеренно.
Более подробную информацию о двух классах вы можете найти в следующем исходном коде:
1. Ok
метод возвращает тип OkObjectResult
:
// Summary:
// A base class for an MVC controller without view support.
[Controller]
public abstract class ControllerBase
{
// Summary:
// Creates an Microsoft.AspNetCore.Mvc.OkObjectResult object that produces an Microsoft.AspNetCore.Http.StatusCodes.Status200OK
// response.
//
// Parameters:
// value:
// The content value to format in the entity body.
//
// Returns:
// The created Microsoft.AspNetCore.Mvc.OkObjectResult for the response.
[NonAction]
public virtual OkObjectResult Ok([ActionResultObjectValueAttribute] object value);
2. OkObjectResult
наследует ObjectResult
:
//
// Summary:
// An Microsoft.AspNetCore.Mvc.ObjectResult that when executed performs content
// negotiation, formats the entity body, and will produce a Microsoft.AspNetCore.Http.StatusCodes.Status200OK
// response if negotiation and formatting succeed.
[DefaultStatusCode(200)]
public class OkObjectResult : ObjectResult
{
//
// Summary:
// Initializes a new instance of the Microsoft.AspNetCore.Mvc.OkObjectResult class.
//
// Parameters:
// value:
// The content to format into the entity body.
public OkObjectResult(object value);
}
3. ObjectResult
наследует ActionResult
:
public class ObjectResult : ActionResult, IStatusCodeActionResult, IActionResult
{
public ObjectResult(object value);
//..
}
Есть ли способ принудительно применить возвращаемый тип во время компиляции или в случае сбоя во время выполнения?
ActionResult<T>
позволяет вам возвращать тип, производный from ActionResult
или вернуть указанный c тип.
Чтобы принудительно выполнить ошибку компиляции, вы можете просто вернуть cat, который является определенным типом c. И вы можете увидеть, что сообщение об ошибке исчезает при изменении * От 1030 * до Cat
:
public ActionResult<Dog> GetCat()
{
var cat = new Cat("Moggy");
return cat;
}
Результат:
введите описание изображения здесь