Asp.net core 在Blazor WebAssembly解决方案中,如何在服务器API的不同端口上托管Blazor WASM客户端应用程序
我有一个Blazor WebAssembly解决方案,其中包含一个客户端项目、服务器项目和共享项目,基于Microsoft的默认解决方案模板。我正在使用Google Chrome在Visual Studio 2019预览版中进行编辑和调试 开箱即用的解决方案只有一个启动项目,即服务器应用程序。该服务器应用程序具有对客户端应用程序的项目引用。您可以通过检查服务器项目属性中的“启用SSL”将其设置为使用HTTPS,我已经这样做了 当您单击debug时,它工作得非常好 现在我想更改它,以便所有Blazor WASM页面都可以从中获得服务,服务器应用程序的API控制器端点也可以从中获得服务 我想使用URL的这个额外的“/api”部分来保持对api的请求与仅仅在Blazor客户端应用程序中导航是分开的。因此,如果我请求“”,我知道我将在我的web API中找到一个点,但是如果我请求“”,我知道我将在Blazor客户端应用程序中找到一个特定的页面。我认为它也将更接近正常的生产设置 我希望我想做的事情很清楚 显然,开始的地方似乎是将服务器应用程序属性的“调试”部分中的“应用程序URL”设置更改为“”。项目分配的安全URL为“”。我在客户端应用程序中保留了相同的设置,因此在客户端应用程序中,客户端应用程序属性的“调试”部分中的“应用程序URL”设置仍然为“”,项目将安全URL分配为“” 那会破坏一切 现在“将我带到404 Not Found错误”和“将我带到显示以下内容的页面: 正在加载…Asp.net core 在Blazor WebAssembly解决方案中,如何在服务器API的不同端口上托管Blazor WASM客户端应用程序,asp.net-core,blazor,iis-express,blazor-client-side,asp.net-core-staticfile,Asp.net Core,Blazor,Iis Express,Blazor Client Side,Asp.net Core Staticfile,我有一个Blazor WebAssembly解决方案,其中包含一个客户端项目、服务器项目和共享项目,基于Microsoft的默认解决方案模板。我正在使用Google Chrome在Visual Studio 2019预览版中进行编辑和调试 开箱即用的解决方案只有一个启动项目,即服务器应用程序。该服务器应用程序具有对客户端应用程序的项目引用。您可以通过检查服务器项目属性中的“启用SSL”将其设置为使用HTTPS,我已经这样做了 当您单击debug时,它工作得非常好 现在我想更改它,以便所有Blaz
发生了未处理的错误。从Wasm/托管模板重新加载对新应用程序的最小更改: WeatherForecastController.cs FetchData.razor
//forecast=wait Http.GetJsonAsync(“WeatherForecast”);
预测=等待Http.GetJsonAsync(“api/WeatherForecast”);
好的!我终于想出了一个可行的办法。这并不复杂,但我花了好几天才找到答案,所以我将把它贴在这里,因为我认为它对其他人有用
在控制器上:
[Route("api/[controller]")]
public class SampleController : ControllerBase
{
//Etc.
}
在Startup.cs中
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//Etc.
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
endpoints.Map("api/{**slug}", HandleApiFallback);
endpoints.MapFallbackToFile("{**slug}", "index.html");
});
}
private Task HandleApiFallback(HttpContext context)
{
context.Response.StatusCode = StatusCodes.Status404NotFound;
return Task. CompletedTask;
}
你的版本是什么?此模型最近有一些更改。我使用的是Microsoft Visual Studio Community 2019预览版16.6.0预览版2.1。WASM应用程序以netstandard2.1和RazorLang 3.0为目标。web API以netcoreapp3.1为目标。两个都是C#8.0版本。感谢您的快速响应,Henk!当应用程序以这种方式设置时,Blazor应用程序仍然会截获对的请求,并显示一个页面,上面写着“此地址没有任何内容”。如果可能的话,我希望像这样的请求从web api传递原始JSON,或者是一个错误,而不是Blazor WASM应用程序上的页面,因为我只希望在URL没有“/api”路径时才涉及客户端应用程序。你明白我的意思吗?嗨,亨克·霍特曼!我希望你身体好。我想知道您是否有机会了解这一点,是否知道如何配置控制器回退,以便“/api”路由不会路由到Blazor客户端应用程序?谢谢您,Henk!对于ASP NET核心人员,下面是我第一次尝试解决方案。这似乎完成了工作,但我很高兴知道这是否是标准和正确的方法:
[Route("api/[controller]")]
public class SampleController : ControllerBase
{
//Etc.
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//Etc.
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
endpoints.Map("api/{**slug}", HandleApiFallback);
endpoints.MapFallbackToFile("{**slug}", "index.html");
});
}
private Task HandleApiFallback(HttpContext context)
{
context.Response.StatusCode = StatusCodes.Status404NotFound;
return Task. CompletedTask;
}