我开始使用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/
?
答案 0 :(得分:0)
答案 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();
}
}