我们正在编写其他页面依赖的旧页面的新版本。因此,保持旧的路由是很重要的。
其中一条路由如下:
https://example.com/area/page.aspx?id=123
我想让这个工作,但指向一个blazor组件。我已经尝试将它作为@page补充到我已经拥有的那些,但应用程序无法运行它。
@page "/page/{id}/{property:int?}"
@page "/page/{id}"
@page "/area/page.aspx?id={id}"
我也试过了
@page "/area/page.aspx
,但这似乎也不起作用。我这么做的时候,Blazor都还没开始。我还测试了
@page "/area/page.tst
无效。我认为是.
和?
才是罪魁祸首。
一个解决方案可能是从旧的URL重定向到组件,用@page指令可以处理的东西,但我不知道在中间件的哪里会这样做。
问题基本上是:哪些方法可以重用旧的URL与Blazor?
我发现在Startup.cs
中有一个方法:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
里面有这个:
app.UseEndpoints(endpoints =>
{
endpoints.MapBlazorHub();
endpoints.MapFallbackToPage("/_Host");
endpoints.MapControllers();
});
在这里我可以添加以下行:
endpoints.MapGet("/area/page.aspx", async x => { x.Response.Redirect("~/page/"); });
它会重定向。漂亮的:)
结果代码将是:
app.UseEndpoints(endpoints =>
{
endpoints.MapBlazorHub();
endpoints.MapFallbackToPage("/_Host");
endpoints.MapControllers();
endpoints.MapGet("/area/page.aspx", async x => { x.Response.Redirect("~/page/"); });
});