MVC 路由配置

MVC Route Configuration

我的 HomeController 中有以下内容:

public ActionResult Share(string id)
{
    Debate debate;
    try
    {
        debate = Db.Debates.Single(deb => deb.ShareText.Equals(id));
    }
    catch (Exception)
    {
        return RedirectToAction("Index");
    }
    return View(debate);
}

这让我可以这样调用 url:

http://localhost:50499/Home/Share/SomeTextHere

我在 routeconfig 文件中这样配置了路由:

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

    routes.MapRoute(
        name: "Share",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Share", id = UrlParameter.Optional }
    );

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

我希望能够这样调用 URL:

http://localhost:50499/Debate/SomeTextHere

我一直在努力解决这个问题,但运气不佳。实现它的最佳方法是什么?

如@StephenMuecke 的评论中所述,您需要更改路线以使其不那么笼统。

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

    routes.MapRoute(
        name: "Share",
        url: "Debate/{id}",
        defaults: new { controller = "Home", action = "Share", id = UrlParameter.Optional }
    );

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

Share 路由现在允许 http://localhost:50499/Debate/SomeTextHere 路由到适当的控制器操作。