如何缩短MVC 4中输出URL中的控制器名称和动作名称



我正在编写一个MVC 4应用程序,它有控制器和许多冗长的操作名称,它们创建了一个很长的URL,很难记住。

你知道我们如何在MVC 4中实现短URL(最好是不影响路由)吗?可能正在使用自定义属性?

实际上,您可以在RouteConfig.cs中指定路由

    routes.MapRoute("SignUp", "signup", new { controller = "SignUp", action = "Index" });
    routes.MapRoute("SignOut", "signout", new { controller = "Login", action = "SignOut" });
    routes.MapRoute("Login", "login", new { controller = "Login", action = "Login" });

这里的第二个参数(signup、signout、login)是短url。如果你想要更多,你可以这样指定你的路线:

    routes.MapRoute("SetNewPassword", "set-new-password/{userId}/{passwordResetKey}", new { controller = "SetNewPassword", action = "Index" });

这里的url类似于/set new password/123/blabla

新路线不会影响默认路线。只要确保你在最后有这个默认行:

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

顺便说一句,您可以使用Phil Haack提供的方便的路由调试器。它真的很容易设置和使用(你只需要在Global.asax.cs中注释/取消注释一行)。它绝对是每个Asp.NetMVC开发人员必备的工具。

可能是一个"catchall"路由将帮助您。

您可以设置一个catch-all类型的路由,将所有/某些请求引导到特定的操作和控制器,比如:

路线。地图路线("ShortUrls","{name}",new{controller="ShortUrl",action="Index",name=UrlParameter。可选});(根据其他路由的设置方式,你可能不想完全这样做,因为这可能会给你带来一些严重的路由问题,但为了简单起见,这在这里有效)

然后根据指定的值将您的操作重定向到所需的URL:

public class ShortUrlController : Controller
{
  //
  // GET: /ShortUrl/
  public ActionResult Index(string name)
  {
    var urls = new Dictionary<string, string>();
    urls.Add("disney", "http://..your lengthy url");
    urls.Add("scuba", "http://another..lengthy url");
    return Redirect(urls[name]);
  }
}

最新更新