Вызовы httpclient на стороне сервера на стороне сервера не доходят до моего класса контроллера веб-API - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь создать многопользовательскую игру с использованием серверного приложения Blazor (RazorComponents) в предварительном просмотре .Net Core 3.0.У меня есть база данных SQL lite и слой доступа к данным в моем проекте сервера для хранения игровой информации.У меня есть класс Controller, также в проекте Server, для возврата объектов из базы данных с использованием уровня доступа к данным.Моя cshtml-страница в проекте приложения выполняет вызов API (используя встроенный HttpClient), пытаясь маршрутизировать мой контроллер, но он не достигает сервера.

Я пробовал разные вызовы клиента Http, но ни один из них не кажетсячтобы добраться до контроллера.Я чувствую, что упускаю что-то очевидное или неправильно что-то настроил.У меня нет достаточного опыта работы с Razor / MVC, поэтому мне сложно найти и устранить неисправность.Для тестирования я пытаюсь вызвать простой метод, который возвращает строку

В разделе App.Game.cshtml @functions {}:

private async Task SaveGame()
{
    var result = await Client.GetStringAsync("/api/Game/Test");
}

В Server.Controllers.GameController:

public class GameController : Controller
{
    [HttpGet]
    [Route("api/Game/Test")]
    public string Test()
    {
        return "test";
    }
}

Мой файл Server.Startup регистрирует службы MVC и Http следующим образом:

// This method gets called by the runtime. Use this method to add services to the container.
    // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorComponents<App.Startup>();
        services.AddMvc();

        //Code I got from internet to register httpclient service
        if (!services.Any(x => x.ServiceType == typeof(HttpClient)))
        {
            // Setup HttpClient for server side in a client side compatible fashion
            services.AddScoped<HttpClient>(s =>
            {
                // Creating the URI helper needs to wait until the JS Runtime is initialized, so defer it.
                var uriHelper = s.GetRequiredService<IUriHelper>();
                return new HttpClient
                {
                    BaseAddress = new Uri(uriHelper.GetBaseUri())
                };
            });
        }
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseStaticFiles();
        app.UseRazorComponents<App.Startup>();
        app.UseMvc(routes => { routes.MapRoute(name: "default", template: "{controller}/{action}/{id?}"); });
    }

Когда вызывается метод SaveGame () и выполняется клиентский вызов, я вижу это ввывод:

Microsoft.AspNetCore.Hosting.Internal.GenericWebHostService: Информация: запрос на запуск HTTP / 1.1 GET http://localhost:59682/api/Game/Test
Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware: Информация: отправка файла.Путь запроса: '/index.html'.Физический путь: '{путь к моей игре} .Server \ wwwroot \ index.html'

Похоже, что он неправильно направляется на контроллер.Я гуглил, как другие люди сделали это, и, кажется, я делаю это правильно.Кто-нибудь знает, что мне не хватает?

Я следую подобным учебным пособиям: http://learn -blazor.com / Architecture / rest-api / https://medium.freecodecamp.org/how-to-create-an-application-using-blazor-and-entity-framework-core-1c1679d87c7e

1 Ответ

0 голосов
/ 10 февраля 2019

Попробуйте: введите app.UseMvc(routes => { routes.MapRoute(name: "default", template: "{controller}/{action}/{id?}"); }); перед вызовом app.UseStaticFiles(); and app.UseRazorComponents<App.Startup>();

Мне кажется, что сервер вместо этого отправляет index.html (StaticFileMiddleware)

...