默认属性路由不起作用

Default attribute route does not work

我有一个控制器,想在上面定义默认路由,如下所示:

public class SignInController : Controller
{
    [Route("", Name = "Default")]
    public ActionResult Index()
    {
        return View();
    }
}

关于RoutingConfig我注释掉了MapRoute

public static void RegisterRoutes(RouteCollection routes)
{
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

  /*routes.MapRoute("Default", "{controller}/{action}/{id}",
    new {controller = "SignIn", action = "Index", id = UrlParameter.Optional}
    );*/
}

当我开始服务器时,我有:

HTTP Error 403.14 - Forbidden The Web server is configured to not list the contents of this directory.

我做错了什么?

您正在执行属性路由但缺少配置...

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapMvcAttributeRoutes();

    /*routes.MapRoute("Default", "{controller}/{action}/{id}",
         new {controller = "SignIn", action = "Index", id = UrlParameter.Optional}
      );*/
}    

...这将为应用程序映射属性定义的路由。

此外,如果您要使用属性路由,您可能需要为您的控制器设置路由前缀。

[RoutePrefix("SignIn")]
public class SignInController : Controller
{
    //eg: GET signin/
    [Route("", Name = "Default")]
    public ActionResult Index()
    {
        return View();
    }
}

如果您希望 SignInController.Index 映射到您的根,则将 RoutePrefix 设置为 ""(空字符串)

看看Attribute Routing in ASP.NET MVC 5