在 Blazor 项目中,当使用控制器路由作为 iframe 的源时,可以通过在 Startup.cs 文件中注册中间件,在请求处理的时候将请求转发到 Blazor 本身的路由处理中。具体方法如下:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.Use(async (context, next) =>
{
var path = context.Request.Path.Value;
if (path.StartsWith("/myController"))
{
context.Request.Path = "/"; // 仅适用于 Blazor 默认的带前缀路由设置。如果使用了自定义前缀,需要根据实际情况修改该值。
context.Request.QueryString = new QueryString($"?iframePath={path}");
await next();
}
});
app.UseStaticFiles();
app.UseRouting();
// ...
}
[HttpGet("BlazorRouteIframe")]
public async Task BlazorRouteIframe(string path)
{
var client = _httpClientFactory.CreateClient("BlazorWebAssemblyApp");
var response = await client.GetAsync(path);
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadAsStringAsync();
var iframePath