我是全新的Blazor,我正试图通过将旧网站/web API项目转换为。net 6 Blazor服务器应用程序来学习,我计划在同一应用程序中同时拥有UI和API。我创建了一个Controllers文件夹,并添加了一个名为ApiController的控制器。我还设置了实体框架,并为我的SQL数据库表创建了实体类。我已经添加了第一个HTTPGET路由,并尝试通过Postman命中它,看看它是否会工作。然而,我一直得到一个消息,该页面无法找到。
我想我需要在Program.cs中添加一些东西,让它知道我想使用api和路由,但是,在我的研究中,我没有找到我缺少的东西或需要添加的东西。大多数示例都希望使用一个WASM项目,该项目可能内置了API和路由信息。
这是我要访问的URL。
https://localhost:7168/api/usersadmin/GetAppNames
ApiController.cs
using Microsoft.AspNetCore.Mvc;
using UsersAdmin_AS.Data;
namespace UsersAdmin_AS.Controllers
{
[Route("api/UsersAdmin/[action]")]
[ApiController]
public class ApiController : ControllerBase
{
[HttpGet]
[Route("GetAppNames")]
public List<string> GetAppNames()
{
//logger.Info("GetAppNames");
List<string> listAppNames = new List<string>();
try
{
var dataManager = new DataManager();
listAppNames = dataManager.GetAppNames();
}
catch (Exception ex)
{
//logger.Error("ERROR: {0} | {1} | {2}", ex.Message, ex.StackTrace, ex.InnerException);
throw;
}
return listAppNames;
}
}
Program.cs
using UsersAdmin_AS.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddSingleton<WeatherForecastService>();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");
app.Run();
我发现了这篇文章,它解决了我的问题。
https://stackoverflow.com/questions/70583469/host-web-api-in-blazor-server-application
这是我在控制器顶部使用的路由。
[Route("api/UsersAdmin/")]
我用这个作为我的特定路线。
[HttpGet]
[Route("GetAppNames")]
我添加了builder.Services.AddControllers()
,注释掉了app.MapBlazorHub()
和app.MapFallbackToPage("/_Host")
。然后我添加了app.UseEndpoints()
功能。
这是我更新的Program.cs文件。
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;
using UsersAdmin_AS.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddControllers();
builder.Services.AddSingleton<WeatherForecastService>();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
//app.MapBlazorHub();
//app.MapFallbackToPage("/_Host");
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapBlazorHub();
endpoints.MapRazorPages();
endpoints.MapFallbackToPage("/_Host");
});
app.Run();
将[Route("api/UsersAdmin/[action]")]替换为[Route("api/UsersAdmin/[controller]")]
并注释掉控制器中的[Route("GetAppNames")]。你的swagger应该显示GetAppNames端点