Blazor - WASM: не удалось загрузить ресурс: сервер ответил со статусом 404 (не найден) - PullRequest
0 голосов
/ 30 марта 2020

Я получаю сообщение об ошибке ниже, код не может найти контроллер и его методы. Я пытаюсь добавить пользователя в базу данных из компонента создания пользователя.

Не удалось загрузить ресурс: сервер ответил с состоянием 404 (не найдено)

Предварительный просмотр Visual Studio 2019. Клиент - Target Framework:. Net Стандартный 2.1 Сервер - Target Framework:. Net Core 3.1 Shared - Target Framework:. Net Стандарт 2.1

do tnet - версия 3.1.200 / // Предварительная версия

Код контроллера

[Route("api/[controller]")]
[ApiController]
public class UserInfoController : ControllerBase
{
    private readonly ApplicationDbContext dbContext;

    public UserInfoController(ApplicationDbContext dbContext)
    {
        this.dbContext = dbContext;
    }

    [HttpPost]
    public async Task<ActionResult<int>> Post(UserInfo user)
    {
        //some code here to add user to db
    }
}

Код компонента

    private async Task AddUser()
    {
        Console.WriteLine("Add user method");
        try
        {
            await userService.CreateUser(_user);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

Служба пользователя

public class UserServices : IUserInfo
{
    private readonly IHttpService httpService;
    private string url = "api/userinfo"; //Controller

    public UserServices(IHttpService httpService)
    {
        this.httpService = httpService;
    }

    public async Task CreateUser(UserInfo user)
    {
        var response = await httpService.Post(url, user);
    }
}

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Спасибо Ericgrantholland & Xing Zou за вашу помощь.

После долгого анализа я обнаружил, что для его работы необходимо внести два изменения.

  1. Установить Сервер при запуске проекта .... как выделено на снимке экрана. Ранее он был настроен как клиент при запуске проекта.

enter image description here

Добавление строки ниже в файле startup.cs.

endpoints.MapDefaultControllerRoute ();

Теперь код конечной точки выглядит следующим образом:

 app.UseEndpoints(endpoints =>
        {

            //ZS new line added
            endpoints.MapDefaultControllerRoute();

            //Original code
            endpoints.MapControllers();                
            endpoints.MapFallbackToFile("index.html");

        });

После внесения этих изменений мне удалось вызвать API контроллера.

Спасибо

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

Я думаю, что вы должны использовать HttpClient вместо IHttpService. Попробуйте внедрить клиент в свой компонент, добавив следующий код в верхней части страницы компонента.

@ inject HttpClient http

Затем вместо вызова вашей службы позвоните

и ждите http.PostJsonAsyn c («api / user info», _ user);

Если это сработает, следующим шагом будет изменение службы для внедрения HttpClient в службу вместо службы IHttpService. Тогда вы сможете звонить в сервис напрямую, а не в HttpClient.

...