重定向到区域总是给出 404 或错误的重定向

Redirect to Area always gives 404 or wrong Redirect

我正在尝试制作一个应用程序,其中包含一个只有您登录后才能进入的区域。

出于某种原因,当我在登录后重定向到我的区域时失败。导致以下路线生成

 var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
 if (result.Succeeded)
 {
    _logger.LogInformation(1, "User logged in.");
    return RedirectToAction("Index", "Home", new { area = "Dashboard" });
  }

重定向的路由: http://localhost:23490/Account/Login?ReturnUrl=%2FDashboard%2FHome

如果我直接浏览 link(像这样)http://localhost:23490/Dashboard/Home/Index

我得到一个 404

我要访问的控制器定义如下

  //[Authorize]
[Area("Dashboard")]
[Route("Dashboard/[controller]")]
public class HomeController : Controller
{
    // GET: Dashboard
    [HttpGet]
    public ActionResult Index()
    {
        return View();
    }

我检查了我能找到的关于这个主题的所有内容,但由于这是非常新的,所以关于这个的信息不多。

我试过的

我希望有人可以帮助我解决这个问题。 谢谢!

为了使您的示例工作,您应该标记 [HttpGet("Index")] 您的 Index 方法

[Area("Dashboard")]
[Route("Dashboard/[controller]")]
public class HomeController : Controller
{
    // GET: Dashboard
    [HttpGet("Index")]
    public ActionResult Index()
    {
        return View();
    }

所以这里你的 HomeController 以 RESTFUL 的方式工作,所以你可以使用 public IActionResult Get()[HttpPost] public IActionResult Post()。如果这是你想要的,你可以用更通用的方式实现它

[Area("Dashboard")]
[Route("[area]/[controller]")]
public class HomeController : Controller
{
    // GET: Dashboard
    [HttpGet("Index")]
    public ActionResult Index()
    {
        return View();
    }

如果你不想 RESTFUL 用于你的仪表板,你应该删除 [HttpGet("Index")] 并添加 [action] 到你的控制器属性,所以如果会像这样

[Area("Dashboard")]
[Route("[area]/[controller]/[action]")]
public class HomeController : Controller
{
    // GET: Dashboard
    public ActionResult Index()
    {
        return View();
    }

如果此套件符合您的目的,您可以完全省略 [Route("[area]/[controller]/[action]")],因为这是默认约定。