我已在我的解决方案中添加了一个 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) 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 ?
我有一个 blazor wasm 托管应用程序,用户可以通过填写表单来创建帐户。创建帐户后,系统会向用户发送一封电子邮件,其中包含他/她必须点击的链接以确认他/她对电子邮件地址的所有权。该链接指向我的服务器中的操作方法。同一服务器托管 blazor wasm 应用程序和 API。
问题是,当用户单击该链接时,请求不会发送到服务器。相反,blazor 会拦截调用并尝试路由到页面。
我怎样才能做到这一点?如何创建一个指向我的服务器中的操作的链接,在单击时实际将其发送到服务器?换句话说,如果可能的话,如何绕过 blazor 的路由系统?
更新:
Url.Action("actionName", "controllerName", actionParam, Request.Scheme);。目前,该链接看起来像
https://localhost:5001/api/user/confirmaemail?confirmationtoken=xyz&useremail=abc<NotFound />因此会显示组件(App.razor 文件)内的内容。注意:
这不是错误。这是 balzor wasm 的正常行为。如果应用程序托管在,则对(例如 )www.foo.com的所有调用实际上不会进行,但会被 blazor 拦截并视为应用程序中页面的路由。然而,这阻止了我,因为我的 API 与应用程序具有相同的基地址(应用程序目前位于 at ,API 位于),因此,当我单击链接时,blazor 会阻止对服务器的调用。问题是如何解决这个问题?如果不可能,我还需要哪些其他选项来实现此流程?foo.comwww.foo.com/barfoo.comlocalhost:5001/localhost:5001/api/xyz
更新:
在 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)