返回的是名称相同的ambiguos控制器 我尝试了一些代码,作为routeAttribute [Route]和[Area],但没有成功。 我正在使用Asp.net Core MVC-C#
case 1:
redirection = RedirectToAction("Index", "Home", new { area = "first" }); ;
break;
case 2:
redirection = RedirectToAction("Index", "Home", new { area = "second" });
break;
我的路线:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Login}/{action=Index}/{id?}");
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Admin}/{action=Index}/{id?}"
);
//routes.MapRoute("areaRoute", "{area:exists}/{controller=Admin}/{action=Index}/{id?}");
//routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}");
});
[Microsoft.AspNetCore.Authorization.AllowAnonymous]
[Area("first")]
public class HomeController : Controller
{
[Route("first")]
public IActionResult Index()
{
return View();
}
public IActionResult Logout()
{
return RedirectToAction("Logout", "Login");
}
}
答案 0 :(得分:1)
将您的路线定义合并为一个UseMvc
调用,并且始终将默认路线排在最后,顺序很重要。
app.UseMvc(routes =>
{
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Admin}/{action=Index}/{id?}"
);
routes.MapRoute(
name: "default",
template: "{controller=Login}/{action=Index}/{id?}");
});
});
尝试一下,看看它是否为您固定了路线。除此之外,我没有看到任何其他与您的代码有关的超级明显问题,但是如果将区域称为“第一”,我将避免将您的路由称为“第一”。我觉得那只会使事情变得混乱。
不过可能想为您的控制器清理“默认”值。
我知道您想要的是可能的,我在代码中做了很多次。如果仍然无法解决,请通知我们。
答案 1 :(得分:0)
这项工作可以吗?
case 1:
redirection = Area.first.Controllers.HomeController.RedirectToAction("Index", "Home", new { area = "first" }); ;
break;
case 2:
redirection = Area.second.Controllers.HomeController.RedirectToAction("Index", "Home", new { area = "second" });
break;