asp.net-core - 如何像 JavaScript-SPA 一样托管 ASP.NET API 和 Blazor Web 程序集?

标签 asp.net-core asp.net-web-api single-page-application blazor asp.net-blazor

上下文:

我们想要创建一个在客户端使用 Blazor WebAssembly 运行的单页应用程序。在服务器端,该解决方案有一个 ASP.NET MVC,其中包括一些用于我们的 REST API 的 ApiController 类。

我们希望在服务器端使用 ASP.NET API 而不是 Blazor Server,因为我们希望为未知的消费者提供带有 ApiController 类的 REST 接口(interface)。

这是我在单个解决方案中的客户端(Blazor WebAssembly)和服务器端(ASP.NET API)项目:

enter image description here

enter image description here

第一次尝试通过我们的 FetchData 中的 Blazor 的 HttpClient 类请求 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/ 托管API 通过 https://localhost:44349/ 托管.如何像使用 JavaScript 框架一样托管这两个项目?

最佳答案

您可以,具体取决于您希望如何托管和部署您的解决方案:

2 个不同主机中的 API 和应用程序

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 中设置 blazor 服务器类(class)

  • public void Configure(IApplicationBuilder app)
    {
        app.UseBlazorFrameworkFiles();
        ...
        app.UseEndpoints(endpoints => 
       {
           endpoints.MapDefaultControllerRoute();
           endpoints.MapFallbackToFile("index.html");
       });
    }
    

    您可以使用以下命令创建示例解决方案:dotnet new blazorwasm --hosted .它将使用 Blazor wasm 项目和主机创建解决方案。

    Docs

    关于asp.net-core - 如何像 JavaScript-SPA 一样托管 ASP.NET API 和 Blazor Web 程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61011880/

    相关文章:

    azure - 无法在 Application Insights 中为 ASP Core 应用程序配置实时流

    asp.net-core - Microsoft.Extensions.Logging 中是否提供强制日志记录

    javascript - JSP 在 SPRING MVC Web 应用程序中呈现客户端还是服务器端?

    javascript - 单页应用程序和 <form> 元素

    .net - WebApi/.net-core : Can't access to webapi

    selenium - 如何在启动 xunit + Selenium 测试 ASPNET 5 之前启动网站

    c# - 如何更新 dot net core 中的子 nuget 包

    C# ASP.NET MVC 4 Web API XmlDocumentationProvider 错误

    asp.net-mvc - 使用 ASP.NET Web API 进行跨平台身份验证

    c# - 如何使用单页保护 Web API