ASP.NET Core默认路由无效

时间:2017-09-29 13:45:35

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

似乎无法让我的默认路由在ASP.NET Core 2.0中运行,我忽略了什么?

Startup.cs

public class Startup
{
    public IConfiguration Configuration { get; set; }

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseMvc(routes => 
        {
            routes.MapRoute("default", "{controller}/{action}/{id?}", new { controller = "Home", action = "Index" });
        });
    }
}

HomeController.cs

[Route("[controller]")]
public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}

当我浏览网址时,没有任何反应,没有重定向到主页?

2 个答案:

答案 0 :(得分:11)

只需删除控制器上的[Route("[controller]")]装饰即可。

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}

使用您在UseMvc方法中使用传统路由模式注册的默认路由,现在它应该适用于yourBaseUrlyourBaseUrl\Home以及yourBaseUrl\Home\Index

通常,您在控制器级别使用[Route("[controller]")]属性作为该控制器上所有路由的路由前缀,以便为您的操作方法创建自定义属性路由定义。

[Route("[controller]")]
public class HomeController : Controller
{
    [Route("myseofriendlyurlslug")]
    public IActionResult Index()
    {
        return View();
    }
}

现在可以通过yourBaseUrl/Home/myseofriendlyurlslug

访问您的操作方法了

请记住,在使用上述属性路由时,传统的路由模式将无法正常工作。

答案 1 :(得分:1)

这项工作很好

// Startup.cs

...

app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

...

// HomeController.cs

...

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}

....