如何像 JavaScript-SPA 一样托管 ASP.NET API 和 Blazor Web Assembly?
How can I host ASP.NET API and Blazor Web Assembly like an JavaScript-SPA?
上下文:
我们想要创建一个在客户端使用 Blazor WebAssembly 运行的单页应用程序。在服务器端,该解决方案有一个 ASP.NET MVC,其中包括一些用于我们的 REST API 的 ApiController classes。
我们想在服务器端使用 ASP.NET API 而不是 Blazor Server,因为我们想为未知的消费者提供一个带有 ApiController classes 的 REST 接口。
这是我在单个解决方案中的客户端 (Blazor WebAssembly) 和服务器端 (ASP.NET API) 项目:
首先尝试通过 Blazor 的 HttpClient-class 在我们的 FetchData
-组件中请求 API:
@inject HttpClient Http
...
@code {
private TodoItem[] TodoItems;
protected override async Task OnInitializedAsync()
{
TodoItems = await Http.GetJsonAsync<TodoItem[]>("api/ToDo");
}
}
在服务器端,API-Controller 看起来像:
namespace ToDoListAPI.Controllers
{
[Route("api/[controller]")]
[ApiController]
[Produces("application/json")]
public class ToDoController : ControllerBase
{
[HttpGet]
public string IGetAll()
{
var lResult = new List<ToDoList.TodoItem>();
// create dummies
for (var i = 0; i < 10; i++)
{
lResult.Add(new ToDoList.TodoItem() { Title = $"Title {i}", IsDone = false });
}
return JsonSerializer.Serialize(lResult);
}
}
}
问题: 在我的 Blazor WebAssembly 项目中,对 API 的请求失败。 Blazor WebAssembly 项目通过 https://localhost:44340/ and the API is hosted via https://localhost:44349/ 托管。我如何才能像使用 JavaScript 框架那样同时托管这两个项目?
您也可以,具体取决于您希望如何托管和部署您的解决方案:
API 和在 2 个不同主机中的应用程序
Enable CORS in the API project Startup class :
public void Configure(IApplicationBuilder app)
{
...
app.UseCors(configure =>
{
// configure here your CORS rule
}
...
}
一机多用
在您的 API 项目中
- 添加对
Microsoft.AspNetCore.Components.WebAssembly.Server
的包引用
- 在
Startup
class 中设置 blazor 服务器
public void Configure(IApplicationBuilder app)
{
app.UseBlazorFrameworkFiles();
...
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
endpoints.MapFallbackToFile("index.html");
});
}
您可以创建示例解决方案:dotnet new blazorwasm --hosted
。它将使用 Blazor wasm 项目和主机创建一个解决方案。
使用最新的模板更新dotnet new -i Microsoft.AspNetCore.Components.WebAssembly.Templates::3.2.0-preview2.20160.5
您可以通过 运行 以下命令使用 ASP.NET Core Identity 和 IdentityServer 创建带有身份验证的 Blazor WebAssembly 应用设置:
dotnet new blazorwasm --hosted --auth Individual -o BlazorAppWithAuth1
这将创建:
客户端 Blazor
可用于 MVC、API 和 razor 页面的 单个 项目,包含一个 "inline" IdentityServer,它可以用于保护 API 调用
我被困在如何将 IS4 与 APi 放在同一个项目中(这是一个小项目,独立托管的 IDP 太过分了,我只想部署一件事)但是这个模板显示怎么样。
来源:https://devblogs.microsoft.com/aspnet/blazor-webassembly-3-2-0-preview-2-release-now-available/
上下文:
我们想要创建一个在客户端使用 Blazor WebAssembly 运行的单页应用程序。在服务器端,该解决方案有一个 ASP.NET MVC,其中包括一些用于我们的 REST API 的 ApiController classes。
我们想在服务器端使用 ASP.NET API 而不是 Blazor Server,因为我们想为未知的消费者提供一个带有 ApiController classes 的 REST 接口。
这是我在单个解决方案中的客户端 (Blazor WebAssembly) 和服务器端 (ASP.NET API) 项目:
首先尝试通过 Blazor 的 HttpClient-class 在我们的 FetchData
-组件中请求 API:
@inject HttpClient Http
...
@code {
private TodoItem[] TodoItems;
protected override async Task OnInitializedAsync()
{
TodoItems = await Http.GetJsonAsync<TodoItem[]>("api/ToDo");
}
}
在服务器端,API-Controller 看起来像:
namespace ToDoListAPI.Controllers
{
[Route("api/[controller]")]
[ApiController]
[Produces("application/json")]
public class ToDoController : ControllerBase
{
[HttpGet]
public string IGetAll()
{
var lResult = new List<ToDoList.TodoItem>();
// create dummies
for (var i = 0; i < 10; i++)
{
lResult.Add(new ToDoList.TodoItem() { Title = $"Title {i}", IsDone = false });
}
return JsonSerializer.Serialize(lResult);
}
}
}
问题: 在我的 Blazor WebAssembly 项目中,对 API 的请求失败。 Blazor WebAssembly 项目通过 https://localhost:44340/ and the API is hosted via https://localhost:44349/ 托管。我如何才能像使用 JavaScript 框架那样同时托管这两个项目?
您也可以,具体取决于您希望如何托管和部署您的解决方案:
API 和在 2 个不同主机中的应用程序
Enable CORS in the API project Startup class :
public void Configure(IApplicationBuilder app)
{
...
app.UseCors(configure =>
{
// configure here your CORS rule
}
...
}
一机多用
在您的 API 项目中
- 添加对
Microsoft.AspNetCore.Components.WebAssembly.Server
的包引用
- 在
Startup
class 中设置 blazor 服务器
public void Configure(IApplicationBuilder app)
{
app.UseBlazorFrameworkFiles();
...
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
endpoints.MapFallbackToFile("index.html");
});
}
您可以创建示例解决方案:dotnet new blazorwasm --hosted
。它将使用 Blazor wasm 项目和主机创建一个解决方案。
使用最新的模板更新dotnet new -i Microsoft.AspNetCore.Components.WebAssembly.Templates::3.2.0-preview2.20160.5
您可以通过 运行 以下命令使用 ASP.NET Core Identity 和 IdentityServer 创建带有身份验证的 Blazor WebAssembly 应用设置:
dotnet new blazorwasm --hosted --auth Individual -o BlazorAppWithAuth1
这将创建:
客户端 Blazor
可用于 MVC、API 和 razor 页面的 单个 项目,包含一个 "inline" IdentityServer,它可以用于保护 API 调用
我被困在如何将 IS4 与 APi 放在同一个项目中(这是一个小项目,独立托管的 IDP 太过分了,我只想部署一件事)但是这个模板显示怎么样。
来源:https://devblogs.microsoft.com/aspnet/blazor-webassembly-3-2-0-preview-2-release-now-available/