Я пытаюсь создать многопользовательскую игру с использованием серверного приложения 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