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

CBr*_*eze 5 asp.net-mvc asp.net-core

我有以下的Controller&Action我想要当用户进入我的web应用程序将加载的第一页:

[Route("auth")]
public class AuthController : Controller
{
    [Route("signin")]
    public IActionResult SignIn(bool signInError)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试在我的app.UseMvc选项中执行以下操作:

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=auth}/{action=signin}/");
});
Run Code Online (Sandbox Code Playgroud)

但是,当我启动webapp时,它只是导航至http://localhost:52608/。

如果我键入http://localhost:52608/auth/signin?ReturnUrl=%2F网页,则将在用户启动Webapp时正确地加载到该页面上。

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

gar*_*ret 7

混合路由对于某些控制器和动作使用基于约定的路由,而对于另一些控制器则使用属性路由,这是完全有效的。但是,ASP.NET Core MVC不允许在同一操作中存在基于约定的路由和属性路由。如果操作使用属性路由,则任何基于约定的路由都不能映射到该操作。 有关更多信息,请参见ASP.NET Core文档。

有关路由的更多信息

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

如果需要在此控制器中使用属性路由,则可以在web.congig文件中添加重定向操作。或者只是从该操作中删除属性路由,它将起作用:

public class AuthController : Controller
{
    public IActionResult SignIn(bool signInError)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

最简单的解决方案:使用重定向操作添加新控制器,例如:

public class HomeController : Controller
{
    public IActionResult Index()
    {
     return new RedirectToActionResult("SignIn", "Auth", new {signInError = false});
    }
}
Run Code Online (Sandbox Code Playgroud)

并将默认路由添加到该控制器

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=home}/{action=index}/");
});
Run Code Online (Sandbox Code Playgroud)