如何重定向到 ASP.NET Core 2.1 中另一个区域的操作

我尝试使用以下代码从默认区域中的操作重定向到 ControlPanel 区域中的操作:

return RedirectToAction(nameof(Areas.ControlPanel.Controllers.HomeController.Index),
                            nameof(Areas.ControlPanel.Controllers.HomeController).Replace("Controller", ""),                            new { area = nameof(Areas.ControlPanel) });

但它在浏览器中生成这个 url: https://localhost:44360/Home/Index?area=ControlPanel

虽然它希望它是:https://localhost:44360/ControlPanel/Home/Index

有什么想法可以解决吗?


ITMISS
浏览 185回答 3
3回答

哆啦的时光机

我在这里找到了解决方案。ControlPanel 区域中的 Home 控制器必须如下所示:namespace Solution.Areas.ControlPanel.Controllers{    [Area(nameof(ControlPanel))]    [Route(nameof(ControlPanel) + "/[controller]")]    public class HomeController : Controller    {        public IActionResult Index() => View();    }}重要的部分是 [Route(nameof(ControlPanel) + "/[controller]")]。

qq_遁去的一_1

你的说法不完全清楚,试试这个:return RedirectToAction("action", "controller", new { area = "area" });

大话西游666

确保首先注册您的区域路线: app.UseMvc(routes =>        {        routes.MapRoute(name: "areas", template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");        routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}");    });替代定义每个区域控制器的控制器级别路由:[Area("[areaname]")][Route("[areaname]/[controller]")]public class YourController : Controller{    public IActionResult Index() => View();}所有其他失败都明确使用路由:var url = Url.RouteUrl("areas", new { controller = "[controller]", action = "Index", area = "[areaname]" });                        return Redirect(url);
打开App,查看更多内容
随时随地看视频慕课网APP