尝试使用路由设置根主页

Trying to setup root homepage using routing

我正在尝试使用路由模块将我的域 http://www.example.com/ 的根路径设置为 PersonSearch 控制器,但它似乎没有任何效果(404 错误)。

URL http://www.example.com/person/search 正确地将我带到了所需的页面。

RouteConfig.cs

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

    routes.MapMvcAttributeRoutes();

    routes.MapRoute(
      "Root",
      "",
      defaults: new { controller = "Person", action = "Search" }
    );
  }
}

PersonController.cs

public class PesonController : Controller
{
    [HttpGet]
    [Route("person/search")]
    public ActionResult Search()
    {
        PersonSearchViewModel psvm = new PersonSearchViewModel();
        return View(psvm);
    }
}

我认为它在您的路线中缺少 url 参数

routes.MapRoute(
      "Root",
      url: "{controller}/{action}",
      defaults: new { controller = "Person", action = "Search" }
    );

这是一个排序问题。如果您将 URL 定义为空字符串(根),则该路由应放置在 之前 所有其他路由。

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

        routes.MapRoute(
          "Root",
          "",
          defaults: new { controller = "Person", action = "Search" }
        );

        routes.MapMvcAttributeRoutes();

        // Place any other `MapRoute` declarations here
    }
}

我发现我可以通过一段简单的属性路由代码实现我想要的。

public class PesonController : Controller
{
    [HttpGet]
    [Route("~/")]
    [Route("person/search")]
    public ActionResult Search()
    {
        PersonSearchViewModel psvm = new PersonSearchViewModel();
        return View(psvm);
    }
}

然后我可以删除 RouteConfig

中对 routes.MapRoute() 的调用