默认路由在Asp.Net Core中不起作用

时间:2017-12-15 11:56:24

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

我有以下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,则当用户启动网络应用时,我希望网页上的网页正确加载。

我的问题是,如何设置它,以便用户打开网络应用后立即导航到此页面?

2 个答案:

答案 0 :(得分:4)

  

混合路由使用基于约定的路由完全有效   对于某些控制器和操作以及其他人的属性路由。   但是,ASP.NET Core MVC不允许基于约定的路由   和属性路由存在于同一个动作上。 如果某个操作使用   属性路由,没有基于约定的路由可以映射到该操作。   有关详细信息,请参阅ASP.NET核心文档。

More info about routing

因此,如果您想使用属性路由,那么您无法在基于约定的路由中映射默认路径。

如果您需要在此控制器中使用属性路由,则可以在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}}