Веб-сборка Blazor не возвращает строки БД, захваченные в контроллере - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь сделать запрос из моего кода Razor на мой контроллер и вернуть мою единственную строку, которую я знаю, что есть в моей БД.

S coop - я выполняю вызов GET в моем Razor -> Это идет к GET в моем контроллере, где я ЗНАЮ, что это возвращает мою одну строку БД. Так что все выглядит хорошо на заднем конце. Затем я возвращаю это обратно моему интерфейсу, НО данных из GET на мой контроллер не существует, вместо этого он просто содержит исходные данные, которые я поместил в объект.

Это приложение Blazor Web Assembly, поэтому я выполнил все отладки в браузере для интерфейса и VS для всего, чтобы увидеть, что происходит. НО я не могу понять, в чем здесь дело ...

Что здесь происходит ????

/*Razror C#*/

private List<Items> items;

private int Id { get; set; } = 0;
private string Name { get; set; } = "";
private string Description { get; set; } = "";


protected override async Task OnInitializedAsync()
{

   items = await Http.GetJsonAsync<List<Items>>(APIServer);

   //value - 0
   int testID = items.ElementAt(0).Id;

   value - ""
   string testNAME = items.ElementAt(0).Name;

   value - ""
   string testDES = items.ElementAt(0).Description;

}
    
    
    
    
    ....
    
    
 /*Controller*/       
    
[HttpGet]
public async Task<IEnumerable<Item>> GetAsync()
{
   List<Item> currentIems= new List<Item>();
   currentItems = await _dbContext.Item.ToListAsync();


   //this DOES in fact return my 1 row I have in the DB
   return currentItems;
}

1 Ответ

0 голосов
/ 18 марта 2020

Вот рабочая демонстрация, к которой можно обратиться:

items.Razor

@page "/Items"
@inject HttpClient Http

<div>
@if (items == null)
{
    <div>Loading...</div>
}
else
{
    <table>
        <thead>
            <tr>
                <th>Id</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>@items.ElementAt(0).Id</td>
                <td>@items.ElementAt(0).Name</td>
                <td>@items.ElementAt(0).Description</td>
            </tr>
        </tbody>
    </table>
}
</div>

@code {
  private List<Item> items;

  private class Item
  {
    public int Id { get; set; } = 0;
    public string Name { get; set; } = "";
    public string Description { get; set; } = "";
  }


  protected override async Task OnInitializedAsync()
  {
    items = await Http.GetJsonAsync<List<Item>>("https://localhost:44370/api/test");
  }
}

Контроллер WebAPI

[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
    public readonly WebAPIDbContext _dbContext;
    public TestController(WebAPIDbContext dbContext)
    {
        _dbContext = dbContext;
    }
    [HttpGet]
    public async Task<IEnumerable<Item>> GetAsync()
    {
        List<Item> currentItems = new List<Item>();
        currentItems = await _dbContext.Item.ToListAsync();


        //this DOES in fact return my 1 row I have in the DB
        return currentItems;
    }
}

Добавить конфигурацию промежуточного программного обеспечения CORS в программу запуска WebAPI. Конфигурация

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseCors(policy =>
        {
            policy.WithOrigins("https://localhost:44356")
                  .AllowAnyMethod();
        });

        app.UseHttpsRedirection();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }

Результат enter image description here

...