我在我的解决方案中添加了一个webapi项目,其中有一个控制器来执行HttpGet。Blazor服务器项目可以在本地访问它并进行部署。我可以在本地对服务进行邮递员调用,但已部署的版本会从我的_Host文件中给出Blazor连接失败的消息。我应该如何配置外部的webapi访问,而不需要Blazor干扰?
我想这可能是一个我需要解决的路线问题。我使用的是.NET5,我的webapi初创公司有:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "myapp.WebApi v1"));
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
WebApi Program.cs:
namespace myapp.WebApi
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
Program.cs:
namespace myapp.UI
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
我的blazor项目启动:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UsePathBase("/myapp");
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
//TelemetryDebugWriter.IsTracingDisabled = true;
}
else
{
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();
}
// SD2: app.UseSession();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
// SD2: app.UseMvc();
app.UseEndpoints(endpoints =>
{
endpoints.MapBlazorHub();
// prior fallback setting
// endpoints.MapFallbackToPage("/_Host");
// 1/4/22 https://stackoverflow.com/questions/61268117/how-to-map-fallback-in-asp-net-core-web-api-so-that-blazor-wasm-app-only-interc
endpoints.MapFallbackToPage("{*path:regex(^(?!api).*$)}", "/_Host"); // don't match paths beginning with api
});
}
我正在研究如何路由./api/..。调用webapi项目,调用所有其他所有内容到blazor项目。
在VS中,我的调用是https://localhost:44368/api/controller/GetFoos/Year=2020。
我部署的调用(尝试了几个变体) https://serverName/appName/api/controller/GetFoos/Year=2020
在巴兹尔失败了。我希望Blazor忽略并让WebApi来处理它。
发布于 2022-01-04 22:59:47
这只是一些代码,展示了如何在同一个站点上运行API控制器和Blazor。
通常将控制器添加到Blazor Server项目中,如下所示:
添加服务
services.AddControllers();
或如果控制器位于另一个项目/程序集中。
services.AddControllers().PartManager.ApplicationParts.Add(new AssemblyPart(typeof(Blazr.Database.Controllers.WeatherForecastController).Assembly));
然后像这样设置中间件管道:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapBlazorHub();
endpoints.MapRazorPages();
endpoints.MapFallbackToPage("/_Host");
});
_Host.cshtml
是Blazor启动文件。
endpoints.MapControllers();
拦截并满足对控制器的所有请求。Blazor启动页面是最后的退路。
发布于 2022-02-21 10:32:38
您也可以尝试这种方法(通过简单的测试,它看起来很有效)。尝试映射app.Map
内部的回退。
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<LocationsServiceV1>().EnableGrpcWeb();
endpoints.MapControllers();
endpoints.MapRazorPages();
});
app.Map("",
builder =>
{
builder.UseRouting();
builder.UseEndpoints(endpoints =>
{
// Fallback for blazor front-end
endpoints.MapFallbackToAreaPage("{*path:nonfile}", "/_Host", "Frontend");
});
});
https://stackoverflow.com/questions/70583469
复制相似问题