.NET 8 Blazor Web 应用中,如何从客户端项目中调用服务器项目中的控制器方法?

Zhi Lv - MSFT 32,021 信誉分 Microsoft 供应商
2024-03-01T07:10:31.6+00:00

嗨, 我使用 blazor Web 应用模板创建了一个新的 .NET 8 blazor 项目,它给了我两个项目。 现在我想从我的客户端项目调用服务器项目中的 API 方法,我已经在服务器项目中添加好我的API控制器和从数据库访问数据的方法,任何帮助都是值得赞赏的。

注意: 此问题总结整理于:.Net 8 Blazor Web 应用模板给了我两个项目,一个用于服务器,另一个用于客户端,我在服务器项目中添加了控制器,但无法调用控制器方法从数据库获取数据,您能帮我解决这个问题吗

ASP.NET Core
ASP.NET Core
.NET Framework 中一套用于生成 Web 应用程序和 XML Web 服务的技术。
22 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. XuDong Peng-MSFT 10,176 信誉分 Microsoft 供应商
    2024-03-01T10:36:28.6033333+00:00

    你好,

    在.NET 8 Blazor Web 应用中可以使用 HttpClient 从客户端项目中调用服务器端的方法,示例如下:

    1.服务器项目中 Program.cs 中代码:

    builder.Services.AddControllers();
    builder.Services.AddHttpClient();
    ...
    app.MapControllers();
    app.Run();
    

    2.Values API 控制器(这个用于测试,你可以使用你的控制器):

    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        private readonly BlazorApp8ControllerContext _context;
        public ValuesController(BlazorApp8ControllerContext context)
        {
            _context = context;
        }
    
        // GET: api/Values
        [HttpGet]
        public async Task<ActionResult<IEnumerable<User>>> GetUser()
        {
            return await _context.User.ToListAsync();
        }
    }
    

    3.客户端项目添加模型(与服务器项目相同)以访问数据,用户(用于测试的模型,您可以使用您的模型):

    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    

    和GetDataComponent.razor

    @page "/getdata"
    
    @using BlazorApp8Controller.Client.Models
    <h3>GetDataComponent</h3>
    @inject HttpClient Http
    @if (todoItems == null)
    {
        <p>No Todo Items found.</p>
    }
    else
    {
        <ul>
            @foreach (var item in todoItems)
            {
                <li>@item.Name</li>
            }
        </ul>
    }
    @code {
        private List<User> todoItems;
        protected override async Task OnInitializedAsync() =>
            todoItems = await Http.GetFromJsonAsync<List<User>>(https://localhost:7281/api/values);//for test, you can use your uri
    }
    

    结果如下:

    2


    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助