【问题标题】:Routing legacy URLs with query parameters in .NET core razor pages在 .NET core razor 页面中使用查询参数路由旧版 URL
【发布时间】:2021-04-13 05:38:45
【问题描述】:

我正在构建一个 ASP.NET Core 5.0 Web 应用程序。它必须支持具有旧 URL 的用户,例如。 contoso.com/privacy.aspx?EmpNo=12&Date=2021-01-07

URL 应该被路由到类似的东西 contoso.com/privacy/12/2021-01-07

目前我的privacy.cshtml中有这个

@page "{id:int?}/{date:datetime?}"
@model PrivacyModel
@{
    ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"] @RouteData.Values["id"] @RouteData.Values["date"]</h1>

在我的 Startup.cs 中,我已经让它工作了

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
            app.UseDeveloperExceptionPage();
        else
            app.UseExceptionHandler("/Error");

        app.UseStaticFiles();
        app.UseRouting();
        app.UseAuthorization();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();

            endpoints.MapGet("privacy.aspx", async context =>
            {
                await Task.Run(() => context.Response.Redirect("/privacy"));
            });
        });
    }

这只会将privacy.aspx 重定向到/privacy。 当我尝试添加查询参数时,它失败了:RoutePatternException:文字部分'privacy.aspx?EmpNo='无效。文字部分不能包含“?”字符。

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages()
            .AddRazorPagesOptions(options =>
            {
                options.Conventions.AddPageRoute("/privacy", "privacy.aspx?EmpNo={id}&Date={date}");
            });
    }

【问题讨论】:

    标签: .net-core url-routing razor-pages


    【解决方案1】:

    好的,经过反复试验,这很简单:

    endpoints.MapGet("privacy.aspx", async context =>
                {
                    var query = context.Request.QueryString;
                    await Task.Run(() => context.Response.Redirect("/privacy" + query.Value));
                });
    

    然后就可以在get方法中获取值了:

     public void OnGet([FromQuery(Name = "EmpNo")] string empNo, [FromQuery(Name = "Date")] DateTime date)
        {
            
        }
    

    【讨论】:

      猜你喜欢
      • 2020-04-03
      • 2021-04-16
      • 1970-01-01
      • 2017-04-22
      • 2020-04-03
      • 1970-01-01
      • 2019-05-22
      • 1970-01-01
      • 2020-05-06
      相关资源
      最近更新 更多