ASP.NET - 如何 Return Web 响应和视图?

ASP.NET - How To Return Both A Web Response And A View?

我有一个 servers 控制器,其操作符合...

[ApiController]
[Route("[controller]")]
[Consumes("application/json")]
public class ServersController : Controller
{
    public ServersController(IMemoryCache memoryCache) => Cache = memoryCache;

    private IMemoryCache Cache { get; }

    [HttpGet(Name = "Get Servers")]
    public IActionResult GetServers()
        => Ok(Cache.Get<List<ServerGetDTO>>(Context.ServerList));
}

...而且我还有一个剃须刀页面...

@page "/servers"

<PageTitle>Get Servers</PageTitle>

<h1>Gets The Servers (Only Via Response, For Now)</h1>

我正在添加 razor/blazor 内容 ...

builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints => endpoints.MapRazorPages());
app.MapBlazorHub();

... 但是当我导航到 https://.../servers 时,我没有收到我期望的 JSON 响应。期望是导航到页面向端点发出 Get 请求,然后我将获得要在前端呈现的视图以及服务器列表作为 JSON 作为响应Get 电话。

我做错了什么?

更新 #1:在我的 API 之上添加 Blazor 之后,我现在注意到 Swagger returns HTML 在调用 https://.../servers 端点时,所以 HTML 文档和 JSON 响应似乎是相互排斥的。我几乎可以肯定我遗漏了什么,我会继续调查。

更新#2:好的,我已经弄明白了。既然我知道问题出在哪里,事后看来,这个问题感觉很愚蠢。这是我的第一个 Blazor 实验,现在我知道我是从对架构级别的技术的误解开始的。基本上,我已经将现有的 API Blazor Server 项目固定在了上面,而事实上,我应该改用 Blazor WASM 项目。现在我已经用 Blazor WASM 替换了 Blazor Server,一切都按预期工作!

如果您想将 front-end 固定到现有的 API,请确保您添加的是 Blazor WASM,而不是 Blazor Server。