重定向到区域总是给出 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();
}
我检查了我能找到的关于这个主题的所有内容,但由于这是非常新的,所以关于这个的信息不多。
我试过的
- 检查视图和控制器是否定义正确,它们是
检查路由是否正确,我觉得是这样
app.UseMvc(routes =>
{
routes.MapRoute(name: "areaRoute",
template: "{area:exists}/{controller=Home}/{action=Index}");
routes.MapRoute(
name: "default",
template: "{controller=Route}/{action=Index}/{id?}");
});
试图为操作创建自定义重定向(失败)
我希望有人可以帮助我解决这个问题。
谢谢!
为了使您的示例工作,您应该标记 [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]")]
,因为这是默认约定。
我正在尝试制作一个应用程序,其中包含一个只有您登录后才能进入的区域。
出于某种原因,当我在登录后重定向到我的区域时失败。导致以下路线生成
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();
}
我检查了我能找到的关于这个主题的所有内容,但由于这是非常新的,所以关于这个的信息不多。
我试过的
- 检查视图和控制器是否定义正确,它们是
检查路由是否正确,我觉得是这样
app.UseMvc(routes => { routes.MapRoute(name: "areaRoute", template: "{area:exists}/{controller=Home}/{action=Index}"); routes.MapRoute( name: "default", template: "{controller=Route}/{action=Index}/{id?}"); });
试图为操作创建自定义重定向(失败)
我希望有人可以帮助我解决这个问题。 谢谢!
为了使您的示例工作,您应该标记 [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]")]
,因为这是默认约定。