Asp.net core 如何用RazorPages路由替换MVC HomeController/Index重定向?

Asp.net core 如何用RazorPages路由替换MVC HomeController/Index重定向?,asp.net-core,asp.net-core-mvc,asp.net-core-2.1,razor-pages,Asp.net Core,Asp.net Core Mvc,Asp.net Core 2.1,Razor Pages,我正在从ASP MVC Classic迁移到ASP Razor页面 只剩下一个要“迁移”的控制器:HomeController public class HomeController : Controller { UserManager<WebUser> _userManager; public HomeController(UserManager<WebUser> _userManager) {

我正在从ASP MVC Classic迁移到ASP Razor页面

只剩下一个要“迁移”的控制器:HomeController

 public class HomeController : Controller
 {
        UserManager<WebUser> _userManager;

        public HomeController(UserManager<WebUser> _userManager)
        {
            this._userManager = _userManager;
        }

        [Authorize]
        public async Task<IActionResult> Index()
        {
            var user = await _userManager.GetUserAsync(User);
            if (user == null)
            {
                return RedirectToPage("/Account/Login", new { area = "WebUserIdentity" });
            }
            return RedirectToPage("/Index", new { area = "Downloads" });
        }
 }
公共类HomeController:控制器
{
用户管理器(UserManager);;
公共家庭控制器(UserManager\u UserManager)
{
这是.\u userManager=\u userManager;
}
[授权]
公共异步任务索引()
{
var user=await\u userManager.GetUserAsync(用户);
if(user==null)
{
返回RedirectToPage(“/Account/Login”,new{area=“WebUserIdentity”});
}
返回RedirectToPage(“/Index”,new{area=“Downloads”});
}
}
此控制器/操作没有对应的视图


正因为如此,我陷入了困境:如何配置razor页面的路由以使用这些重定向(到两个不同的区域),而不创建“假”索引页面

我相信您可以转换控制器,为索引页面
页面/IndexModel
创建页面模型,并执行相同的重定向

public class IndexModel : PageModel {
    UserManager<WebUser> _userManager;

    public IndexModel(UserManager<WebUser> _userManager) {
        this._userManager = _userManager;
    }

    public async Task<IActionResult> OnGetAsync() {
        var user = await _userManager.GetUserAsync(User);
        if (user == null) {
            return RedirectToPage("/Account/Login", new { area = "WebUserIdentity" });
        }
        return RedirectToPage("/Index", new { area = "Downloads" });
    }
}
公共类索引模型:PageModel{
用户管理器(UserManager);;
公共索引模型(UserManager\u UserManager){
这是.\u userManager=\u userManager;
}
公共异步任务OnGetAsync(){
var user=await\u userManager.GetUserAsync(用户);
if(user==null){
返回RedirectToPage(“/Account/Login”,new{area=“WebUserIdentity”});
}
返回RedirectToPage(“/Index”,new{area=“Downloads”});
}
}

要重定向到不同的页面,我建议您尝试
中间件

app.Use(async (context, next) =>
        {
            // Do work that doesn't write to the Response.
            if (!context.User.Identity.IsAuthenticated && context.Request.Path != "/WebUserIdentity/Account/Login")
            {
                context.Response.Redirect("/WebUserIdentity/Account/Login");
            }
            else if (context.Request.Path == "/")
            {
                context.Response.Redirect("/Downloads/Index");
            }
            await next.Invoke();
            // Do logging or other work that doesn't write to the Response.
        });

        app.UseMvc();

那么,为什么不让控制器保持原样,让它像当前一样重定向呢?我相信您仍然可以为索引页面
页面/IndexModel
创建页面模型,并执行相同的重定向。只是为了净化。我会很高兴当可以删除控制器和视图文件夹。ASP MVC是邪恶的(当有剃刀页面时)你是对的。我将以这个结束。但我希望,只有使用纯“路由”配置才能迁移。奇怪的是,为诸如重定向默认“/”到区域这样的常见任务创建整个页面:)。(实际上,检查是否未通过身份验证转到其他区域是可选的)您当前的代码有什么问题?在
页面
下是否有
索引模型
?如果您从web浏览器访问
WebUserIdentity/Account/Login
Downloads/Index
,它能访问吗?谢谢,Tao。如果您知道所有细节,这应该是正确的方法,但对我来说,很难评估对性能的影响(此代码将在每个请求中执行)和异常情况:我是否应该
try。。catch
(异常:没有机会实现Error.cshtml)?