Asp.Net核心控制器-为什么未键入ObjectResult类?

问题描述

以下方法可以正常编译,我宁愿这是一个编译错误

    [HttpGet("some/route")]
    public ActionResult<string> GetSomething()
    {
        return Ok(23);
    }

stringint不兼容,但这可以很好地编译。使用Swagger(Open API)之类的工具时,它们生成的端点定义不正确。

我想知道为什么没有输入ObjectResult类?此外,是否有解决此问题的方法

编辑: 我试图避免在招摇的定义声称返回string时出现错误,但实际上却得到了int。如果intstring没有意义,那么可以想象两个随机的JSON对象DtoADtoB

解决方法

据我所知,响应不包含int和字符串类型。响应主体的类型为text / plain,application / json或其他。

因此,无需检查OkObjectResult的{​​{1}}值中的int或字符串。通常,所有内容都将转换为字符串或字节 回复内容。

此外,大摇大摆还会根据 ActionResultObjectValue的Tvalue类型。

如果返回ActionResult<Tvalue>,则会发现结果将转换为public ActionResult<int> GetSomething()

enter image description here


更新:

OkObjectResult继承ActionResult。返回的子类不会影响父类的编译。这是设计使然。

int使您可以返回源自ActionResult<T>的类型或返回特定类型。

要强制执行编译错误,您可以返回int这是一种特定类型。当您返回ActionResult时,您会看到错误消息出现。

enter image description here