控制器在区域中的RedirectToAction

时间:2020-02-03 11:24:35

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

我开始使用ASP.Net核心MVC 3.1,并且有一个名为 Foo 的区域:

endpoints.MapAreaControllerRoute(
    name: "Foo",
    areaName: "Foo",
    pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);

在该区域中,名为 Test 的控制器具有 Index 动作:https://localhost:44390/Foo/Test/-可以正常工作。

我正在尝试使用

从另一个控制器重定向到此
return RedirectToAction("Index", "Test", new { area = "Foo" });

但这会将我发送到https://localhost:44390/Test?area=Foo

如何使用RedirectToAction()结尾于https://localhost:44390/Foo/Test/

4 个答案:

答案 0 :(得分:0)

将这些属性放入测试控制器。

[Area(nameof(Foo))]
[Route(nameof(Foo) + "/[controller]")]

Sample Image

答案 1 :(得分:0)

我认为您应该使用以下代码:

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

答案 2 :(得分:0)

MapAreaControllerRoute放在默认路由之后会重现您的问题。因此,要解决此问题,您的区域路由配置必须放在第一位。

 app.UseEndpoints(endpoints =>
        {
            endpoints.MapAreaControllerRoute(
               name: "Foo",
               areaName: "Foo",
               pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
           );
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");

        });

答案 3 :(得分:0)

您可以使用以下代码

配置中设置路由:

"{area:exists}/{controller=Home}/{action=Index}/{id?}"

然后

public IActionResult Index()
{
   return RedirectToAction("Index", "Test", new { area = "Foo" });
}

然后

[Area("Foo")]
[Route("[controller]")]
public class TestController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}