相关疑难解决方法(0)

如何在 ASP .NET Core Web API 中映射回退,以便 Blazor WASM 应用程序仅拦截不发送到 API 的请求

我有一个 Blazor WebAssembly 解决方案,其中包含客户端项目、服务器项目和共享项目,基于 Microsoft 的默认解决方案模板。我正在使用 Google Chrome 在 Visual Studio 2019 预览版中进行编辑和调试。

该解决方案开箱即用,只有一个启动项目,即服务器应用程序。该服务器应用程序具有对客户端应用程序的项目引用。您可以通过在服务器项目属性中选中“启用 SSL”来将其设置为使用 HTTPS,我已经这样做了。

当您单击调试时,它可以完美运行。

现在我想更改它,以便 Blazor WASM 应用程序仅响应来自https://localhost:44331 的请求,而不响应对https://localhost:44331/api 的请求。这些请求应该由服务器应用程序的 API 控制器端点处理。因此,如果有人访问https://localhost:44331/api/something,并且不存在这样的 API 端点,他们应该从 API 收到 404 错误代码,并且不会被路由到通常的 Blazor 页面说“对不起,没有任何东西在这个地址。”

我想使用 URL 的这个额外的“/api”部分来保持对 API 的请求与对页面的请求分开。我认为这将更接近生产中的正常设置。我希望很清楚我要做什么。

这是一个带有路由属性的示例控制器声明:

namespace BlazorApp2.Server.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        // Etc.

        [HttpGet]
        public IEnumerable<WeatherForecast> Get()
        {
            //etc.
        }
///etc.
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我在 Startup.cs 中尝试过的,但它不起作用。任何人都可以提出一些取悦的建议吗?

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // Etc. …
Run Code Online (Sandbox Code Playgroud)

iis-express asp.net-core blazor asp.net-core-staticfile blazor-client-side

8
推荐指数
3
解决办法
3933
查看次数

客户端blazor从服务器获取数据的方式有哪些?

我现在正在尝试 Blazor 客户端一段时间,我注意到大多数不同的教程都建议客户端 blazor 通过服务器端 web-api 获取数据。

我不知道为什么会这样。为什么 razor 不能调用服务器方法,而是开发人员必须向 API 公开相同的数据。为什么要做这个额外的步骤?

例如

@page "/"
@inject HttpClient Http

<button onclick=@(async () => await PrintWebApiResponse())>Print Web API Response</button>

@functions {
    private async Task PrintWebApiResponse()
    {
        var response = await Http.GetStringAsync("/api/Customer");
        Console.WriteLine(response);
    }
}
Run Code Online (Sandbox Code Playgroud)

这可以改写为

@page "/"
@inject HttpClient Http

<button onclick=@(async () => await PrintWebApiResponse())>Print Web API Response</button>

@functions {
    private async Task PrintWebApiResponse()
    {

        ServerServices.Service service = new ServerServices.Service();
        var response = service.GetCustomer();

        Console.WriteLine(response);
    }
}
Run Code Online (Sandbox Code Playgroud)

我刚刚尝试过(代码是页面模型中部分类的一部分)并且它工作得非常好。我在这里遗漏了一点吗?为什么建议通过 API 公开此方法?

blazor blazor-server-side blazor-client-side

2
推荐指数
1
解决办法
1937
查看次数