下面的方法编译得很好,我更希望这是一个编译错误:
[HttpGet("some/route")]
public ActionResult<string> GetSomething()
{
return Ok(23);
}string和int是不兼容的,但它可以很好地编译。在使用Swagger (Open API)等工具时,它们会生成不正确的端点定义。
我想知道为什么ObjectResult类没有类型化?此外,是否有解决此问题的方法?
编辑:当swagger定义声明返回一个string时,我试图避免bug,但实际上你得到了一个int。如果JSON s和strings没有意义,那么想象一下两个随机的int对象DtoA和DtoB。
发布于 2020-08-20 16:06:33
据我所知,响应不包含int和string类型。响应体的类型是text/plain、application/json或其他类型。
所以不需要检查OkObjectResult的ActionResultObjectValue值中的int或string,正常情况下,都会转换成string或byte作为响应内容。
此外,swagger将根据ActionResult<Tvalue>的T值类型生成生成端点定义。
如果你返回public ActionResult<int> GetSomething(),你会发现结果会被转换成int。

更新:
OkObjectResult继承ActionResult。返回的子类不会影响父类compilation.This的设计。
ActionResult<T>使您能够返回从ActionResult派生的类型或返回特定类型。
要强制执行编译错误,可以只返回int,这是一个特定的类型。当您返回int时,您可能会看到出现错误消息。

https://stackoverflow.com/questions/63500222
复制相似问题