必要ないpage=0&IdAgency=2
場合は、少なくとも 2 つのオプションがあります。
http://localhost:30120/Agency/AgencyName/2/0
likeおよび usingの URL に置き換え MVC.AGENCY.INDEX (string name, int? Page, int IdAgency)
ます (以下のルーティングの Way1 を参照)。
コントローラーから id と page をまったく削除し、名前のみでマップします (一意の場合のみ)。持っhttp://localhost:30120/Agency/AgencyName
て使用しMVC.AGENCY.INDEX (string name)
ます (以下のルーティングの Way2 を参照)
SEO URL を取得するには、ルートを登録する必要があります。Application_Start
のメソッドでそれを行うことができますGlobal.asax
。ここに良い概要があります
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Map("Way1", "Agency/{name}/{IdAgency}/{Page}", MVC.Agency.Index().AddRouteValue("page", 1)
, new { Page = @"\d*" } );
routes.Map("Way2", "Agency/{name}", MVC.Agency.Index() );
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
T4MVC で使用するいくつかの拡張機能を作成しました。
public static class RouteExtensions
{
#region Map
public static Route Map(this RouteCollection routes, string routename, string url,
ActionResult result)
{
return routes.Map(routename, url, result, null, null, null);
}
public static Route Map(this RouteCollection routes, string routename, string url,
ActionResult result, object constraints)
{
return routes.Map(routename, url, result, null, constraints, null);
}
public static Route Map(this RouteCollection routes, string routename, string url,
ActionResult result, object defaults, object constraints, string[] namespaces)
{
return routes.MapRoute(routename, url, result, defaults, constraints, namespaces)
.SetRouteName(routename);
}
#endregion
public static string GetRouteName(this RouteValueDictionary routeValues)
{
if (routeValues == null)
{
return null;
}
object routeName = null;
routeValues.TryGetValue("__RouteName", out routeName);
return routeName as string;
}
public static Route SetRouteName(this Route route, string routeName)
{
if (route == null)
{
throw new ArgumentNullException("route");
}
if (route.DataTokens == null)
{
route.DataTokens = new RouteValueDictionary();
}
route.DataTokens["__RouteName"] = routeName;
return route;
}
}