到同一剃刀页面的多条路线

时间:2020-02-14 09:48:27

标签: c# asp.net-core .net-core asp.net-core-mvc razor-pages

背景

我在Asp.Net Core 3.1网站上有一个剃须刀页面,名为SignupAndApply。它实际上是注册人身份页面的复制和粘贴,但:

  • 还有一些其他字段
  • 允许将可选的applyid作为路线的一部分传递
  • 如果我在路由中传递了applyId,则会对页面进行几次标签更改,并将用户重定向到其他地方

我要为此页面创建两条路线:

/identity/account/signupandapply/{applyId?} 'when the user is applying and signing up
/identity/account/signup 'when the user is just signing up

我在页面顶部添加了以下内容:

@page "{applyId?}"

并在OnGetAsync方法上将applyId设置为可选参数:

public async Task OnGetAsync(string returnUrl = null, Guid? applyId = null)

问题

带有applyId的路由有效,但/ identity / account / signup路由无效。

我尝试将其添加到我的启动中:

services.AddMvc()
        .AddRazorPagesOptions(options => options.Conventions
                             .AddPageRoute("/identity/account/signupandapply", "/identity/account/signup")
                             );

如果我去其中之一就行了

/identity/account/signupandapply/<fooapplyid>
/identity/account/signupandapply

但不是这个

/identity/account/signup

有什么想法我在做错什么,应该添加一条简单的替代路线吗?

1 个答案:

答案 0 :(得分:1)

页面(/identity/account/signupandapply)位于区域Identity中,因此您需要使用AddAreaPageRoute而不是AddAreaPage

services.AddRazorPages().AddRazorPagesOptions(options =>
{

    options.Conventions.AddAreaPageRoute("Identity",
           "/account/signupandapply", "identity/account/signup");

    }); ;