相关疑难解决方法(0)

在 blazor 服务器应用程序中托管 Web api

我已在我的解决方案中添加了一个 webapi 项目,其中包含一个控制器来执行 HttpGet。Blazor服务器项目可以在本地很好地访问并部署。我可以在本地对服务进行邮递员调用,但部署的版本从我的 _Host 文件中向我提供 Blazor 连接失败消息。如何在不干扰 Blazor 的情况下从外部配置 webapi 访问?

我认为这可能是我需要解决的某种路由问题。我正在使用 .NET5,我的 webapi 启动有这个:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseSwagger();
        app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "myapp.WebApi v1"));
    }
    app.UseHttpsRedirection();
    app.UseRouting();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}
Run Code Online (Sandbox Code Playgroud)

WebApi程序.cs:

namespace myapp.WebApi
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}
Run Code Online (Sandbox Code Playgroud)

Blazor 程序.cs:

namespace myapp.UI
{
    public class …
Run Code Online (Sandbox Code Playgroud)

asp.net-core-webapi blazor blazor-server-side

7
推荐指数
3
解决办法
1万
查看次数

endpoints.MapFallbackToFile("index.html") messes up routing in asp.net core project

The solution has a web-api project that is also the host for a blazor-webassembly front-end.

With this config all works fine. WebApi endpoint get hit correctly when called from postman.

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
        endpoints.MapRazorPages();
    });
Run Code Online (Sandbox Code Playgroud)

When adding a MapFallBackToFile suddenly some Api-Endpoint do not get hit anymore but serve that default file.

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
            endpoints.MapRazorPages();
            endpoints.MapFallbackToFile("index.html");
        });
Run Code Online (Sandbox Code Playgroud)

The reason for adding this fallback : serve as landing page for the Blazor front-end.

Any suggestions ?

routes asp.net-core blazor-webassembly

5
推荐指数
0
解决办法
7190
查看次数

如何绕过 blazor wasm 路由系统并调用服务器

我有一个 blazor wasm 托管应用程序,用户可以通过填写表单来创建帐户。创建帐户后,系统会向用户发送一封电子邮件,其中包含他/她必须点击的链接以确认他/她对电子邮件地址的所有权。该链接指向我的服务器中的操作方法。同一服务器托管 blazor wasm 应用程序和 API。

问题是,当用户单击该链接时,请求不会发送到服务器。相反,blazor 会拦截调用并尝试路由到页面。

我怎样才能做到这一点?如何创建一个指向我的服务器中的操作的链接,在单击时实际将其发送到服务器?换句话说,如果可能的话,如何绕过 blazor 的路由系统?

更新:

  • 我使用 Identity 作为后备存储(但这与我遇到的问题无关)。
  • 我使用基本控制器中的 Url 属性生成链接Url.Action("actionName", "controllerName", actionParam, Request.Scheme);。目前,该链接看起来像 https://localhost:5001/api/user/confirmaemail?confirmationtoken=xyz&useremail=abc
  • 该操作是后操作。
  • 当 blazor 尝试重定向到该页面时,显然不能,因为我没有具有此类路由的页面。<NotFound />因此会显示组件(App.razor 文件)内的内容。

注意: 这不是错误。这是 balzor wasm 的正常行为。如果应用程序托管在,则对(例如 )www.foo.com的所有调用实际上不会进行,但会被 blazor 拦截并视为应用程序中页面的路由。然而,这阻止了我,因为我的 API 与应用程序具有相同的基地址(应用程序目前位于 at ,API 位于),因此,当我单击链接时,blazor 会阻止对服务器的调用。问题是如何解决这个问题?如果不可能,我还需要哪些其他选项来实现此流程?foo.comwww.foo.com/barfoo.comlocalhost:5001/localhost:5001/api/xyz

c# asp.net-core blazor-client-side blazor-webassembly

5
推荐指数
1
解决办法
2324
查看次数

Blazor WebAssembly 应用程序 - 来自浏览器的 API 调用 - 抱歉,此地址没有任何内容

更新:

在 Github ASP.NET Core 项目上创建了一个问题:

https://github.com/dotnet/aspnetcore/issues/32522

原来的:

使用 Microsoft Visual Studio 2019 版本 16.9.4 和 Target Framework .NET 5.0 和 ASP.NET Core Hosted 创建了一个新的 Blazor WebAssembly 应用程序。

问题是,如果我在将站点发布到 Azure Web 应用程序时从浏览器进行 API 调用,我会收到如下错误响应:

抱歉,此地址没有任何内容。

在此处输入图片说明

如果我使用“空缓存和硬重新加载”发出请求,一切都会按预期进行。

在此处输入图片说明

该请求始终适用于localhost

它不仅限于通过 API 加载的图像,对于JSON response.

在此处输入图片说明

在此处输入图片说明

如何判断Blazor不使用/忽略包含 的 URL 的路由/api/

我已经读过ASP.NET Core Blazor routing但没有在那里找到任何东西。

https://docs.microsoft.com/en-us/aspnet/core/blazor/fundamentals/routing?view=aspnetcore-5.0

错误消息来自App.razor文件:

<CascadingAuthenticationState>
    <Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
        <Found Context="routeData">
            <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
        </Found>
        <NotFound>
            <LayoutView Layout="@typeof(MainLayout)">
                <p>Sorry, there's nothing …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-web-api asp.net-core blazor blazor-webassembly

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