C# Asp.net Core 3.1-如何从控制器返回Razor页面?

C# Asp.net Core 3.1-如何从控制器返回Razor页面?,c#,asp.net-mvc,asp.net-core,model-view-controller,razor-pages,C#,Asp.net Mvc,Asp.net Core,Model View Controller,Razor Pages,我想当用户登录到该网站时,转到razor页面中我想要的地址 if (rolename == "User") { return RedirectToPage("Dashboard","Profile"); } 此代码无法正常工作 以下是错误消息: InvalidOperationException:相对页面路径“Dashboard”只能在执行Razor页面时使用。

我想当用户登录到该网站时,转到razor页面中我想要的地址

  if (rolename == "User")
       {            
        return RedirectToPage("Dashboard","Profile");
       }
此代码无法正常工作

以下是错误消息:

InvalidOperationException:相对页面路径“Dashboard”只能在执行Razor页面时使用。指定具有前导“/”的根相对路径,以在页面外部生成URL。如果您使用的是LinkGenerator,则必须提供当前HttpContext才能使用相对页面


如何做到这一点?

RedirectToPage有多个具有不同参数的方法,您所做的与以下方法相关:

        //
    // Summary:
    //     Redirects (Microsoft.AspNetCore.Http.StatusCodes.Status302Found) to the specified
    //     pageName using the specified pageHandler.
    //
    // Parameters:
    //   pageName:
    //     The name of the page.
    //
    //   pageHandler:
    //     The page handler to redirect to.
    //
    // Returns:
    //     The Microsoft.AspNetCore.Mvc.RedirectToPageResult.
    [NonAction]
    public virtual RedirectToPageResult RedirectToPage(string pageName, string pageHandler);
在您的情况下,它应该是:

return RedirectToPage("/Profile/Dashboard");
此外,请确保添加razor页面路由:

 public void ConfigureServices(IServiceCollection services)
 {
     services.AddRazorPages(); 
 }

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
 {
        //...

     app.UseEndpoints(endpoints =>
     {               
         endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Privacy}/{phrase?}");

         endpoints.MapRazorPages();

     });          
 }

RedirectToPage有多个具有不同参数的方法,您所做的与以下方法相关:

        //
    // Summary:
    //     Redirects (Microsoft.AspNetCore.Http.StatusCodes.Status302Found) to the specified
    //     pageName using the specified pageHandler.
    //
    // Parameters:
    //   pageName:
    //     The name of the page.
    //
    //   pageHandler:
    //     The page handler to redirect to.
    //
    // Returns:
    //     The Microsoft.AspNetCore.Mvc.RedirectToPageResult.
    [NonAction]
    public virtual RedirectToPageResult RedirectToPage(string pageName, string pageHandler);
在您的情况下,它应该是:

return RedirectToPage("/Profile/Dashboard");
此外,请确保添加razor页面路由:

 public void ConfigureServices(IServiceCollection services)
 {
     services.AddRazorPages(); 
 }

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
 {
        //...

     app.UseEndpoints(endpoints =>
     {               
         endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Privacy}/{phrase?}");

         endpoints.MapRazorPages();

     });          
 }

你好@AliKhansari,错误消息是什么?您是否尝试本地重定向(“/Dashboard/Profile”)?@Sasaman是的,不是work@Rena
InvalidOperationException:相对页面路径“Dashboard”只能在执行Razor页面时使用。指定具有前导“/”的根相对路径,以在页面外部生成URL。如果您使用的是LinkGenerator,则必须提供当前的HttpContext才能使用相关页面。
@AliKhansari您可以向我们展示您的项目结构吗?页面和控制器,您的启动类…嗨@AliKhansari,错误消息是什么?您是否尝试本地重定向(“/Dashboard/Profile”)?@Sasaman是的,不是work@Rena
InvalidOperationException:相对页面路径“Dashboard”只能在执行Razor页面时使用。指定具有前导“/”的根相对路径,以在页面外部生成URL。如果您使用的是LinkGenerator,则必须提供当前的HttpContext才能使用相关页面。
@AliKhansari您可以向我们展示您的项目结构吗?页面和控制器,您的启动类。。。