我正在编写一个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]);
}
}