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

时间:2018-07-15 17:15:10

标签: c# asp.net-core-mvc

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

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

,但它在浏览器中生成以下网址: https://localhost:44360/Home/Index?area=ControlPanel

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

有什么想法可以解决吗?

4 个答案:

答案 0 :(得分:1)

我找到了解决方法here。 ControlPanel区域中的Home控制器必须如下所示:

namespace Solution.Areas.ControlPanel.Controllers
{
    [Area(nameof(ControlPanel))]
    [Route(nameof(ControlPanel) + "/[controller]")]
    public class HomeController : Controller
    {
        public IActionResult Index() => View();
    }
}

重要的部分是[Route(name((ControlPanel)+“ / [controller]”))]。

答案 1 :(得分:0)

您的陈述并不完全清楚, 试试这个:

block.Number()

答案 2 :(得分:0)

我也遇到过同样的情况,经过多次尝试,我将其修复。

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?}");
            });

区域模板应该是第一个。 现在,您可以将区域重定向到类似

的区域
return RedirectToAction("action name", "controller name", new { area = "area name" });

答案 3 :(得分:0)

确保首先注册您的区域路线:

 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);