我正在尝试制作一个应用程序,其中包含一个只有在您登录时才能进入的区域。
出于某种原因,我在登录后重定向到我的区域时失败了。导致以下路线生成
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
如果我直接浏览链接(如此)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();
}
我检查了有关这个主题的所有内容,但由于这是非常新的,因此没有太多相关信息。
我尝试了什么
检查路由是否正确,对我来说似乎是
app.UseMvc(routes =>
{
routes.MapRoute(name: "areaRoute",
template: "{area:exists}/{controller=Home}/{action=Index}");
routes.MapRoute(
name: "default",
template: "{controller=Route}/{action=Index}/{id?}");
});
尝试为操作创建自定义重定向(失败)
我希望有人可以帮助我解决这个问题。 谢谢!
答案 0 :(得分:4)
要使您的示例正常工作,您应该将[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]")]
,因为这是默认约定。