如何让一个Minimal API返回布尔值?
我在一个Minimal API中有一个C#类,它会被返回。这个类长得是这样的:
public class APIResponse
{
public APIResponse()
{
ErrorMessages = new List<string>();
Result = new object();
}
public bool IsSuccess { get; set; }
public object Result { get; set; }
public HttpStatusCode StatusCode { get; set; }
public List<string> ErrorMessages { get; set; }
}
我把Result当作一个对象来使用,根据查询返回的内容返回不同的数据类型。对于整数等,这样做一直没问题。但当我尝试给它赋值一个布尔值时,在C# Blazor应用中就会出现各种问题。它抱怨对象无法转换为ValueKind。
我正在把 bool 赋值给 Result。那里为什么会变成 ValueKind?
我找到的所有解决方案,尝试后仍然会出错
对象无法转换为ValueKind
如何在Minimal API中把 bool 赋给 Result,在调用该端点的Blazor应用中得到一个布尔值?
解决方案
发生的并不是你的 bool 在Minimal API中“变成”一个 ValueKind。其实,是你在Blazor应用中对 APIResponse 进行反序列化后,你的 object Result 通常会以一个 JsonElement(来自 System.Text.Json)返回,而那个类型具有一个 ValueKind 属性。
下面是一个与Diego D所说类似的例子:
Minimal API
public class APIResponse<T>
{
public bool IsSuccess { get; set; }
public T? Result { get; set; }
public HttpStatusCode StatusCode { get; set; }
public List<string> ErrorMessages { get; set; } = new();
}
返回一个 bool 结果,例如:
return Results.Ok(new APIResponse<bool>
{
IsSuccess = true,
Result = true,
StatusCode = HttpStatusCode.OK
});
Blazor调用
var resp = await Http.GetFromJsonAsync<APIResponse<bool>>("your-endpoint");
bool value = resp?.Result ?? false;
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。