我有以下Controller
& Action
我希望成为用户输入我的webapp时加载的第一个页面:
[Route("auth")]
public class AuthController : Controller
{
[Route("signin")]
public IActionResult SignIn(bool signInError)
{
}
}
我尝试在我的app.UseMvc
选项中这样做:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=auth}/{action=signin}/");
});
但是,当我启动我的webapp时,它只需导航到http://localhost:52608/
。
如果我输入http://localhost:52608/auth/signin?ReturnUrl=%2F
,则当用户启动网络应用时,我希望网页上的网页正确加载。
我的问题是,如何设置它,以便用户打开网络应用后立即导航到此页面?
答案 0 :(得分:4)
混合路由使用基于约定的路由完全有效 对于某些控制器和操作以及其他人的属性路由。 但是,ASP.NET Core MVC不允许基于约定的路由 和属性路由存在于同一个动作上。 如果某个操作使用 属性路由,没有基于约定的路由可以映射到该操作。 有关详细信息,请参阅ASP.NET核心文档。
因此,如果您想使用属性路由,那么您无法在基于约定的路由中映射默认路径。
如果您需要在此控制器中使用属性路由,则可以在web.congig文件中添加重定向操作。 或者只是从该操作中删除属性路由,它将起作用:
public class AuthController : Controller
{
public IActionResult SignIn(bool signInError)
{
}
}
修改强>
最简单的解决方案: 添加带有重定向操作的新控制器,例如:
public class HomeController : Controller
{
public IActionResult Index()
{
return new RedirectToActionResult("SignIn", "Auth", new {signInError = false});
}
}
并将默认路由添加到此Controller
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=home}/{action=index}/");
});
答案 1 :(得分:1)
默认情况下有一个单独的字段。
{{1}}