using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Principal;
using System.Text;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using WebGrease.Css.Ast;
namespace WebApplicationUrlWrite
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//加載重寫
routes.Add(new MyRoute());
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
public class MyRoute : RouteBase
{
public override RouteData GetRouteData(HttpContextBase httpContext)
{
return null;
//var virtualPath = httpContext.Request.AppRelativeCurrentExecutionFilePath + httpContext.Request.PathInfo;//獲取相對路徑
//var data = new RouteData(this, new MvcRouteHandler());//聲明一個RouteData,添加相應的路由值
//data.Values.Add("controller", "Category");
//data.Values.Add("action", "ShowCategory");
//data.Values.Add("id", 1);
//return null;//返回這個路由值將調用CategoryController.ShowCategory(category.CategoeyID)方法。匹配終止
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
string token = requestContext.HttpContext.Request.QueryString["uck"];
string controller = values["controller"].ToString();
string action = values["action"].ToString();
//處理Html.Action傳遞多參數
//<a href="@Url.Action("About","home",new{articleId= "asldjfsjd", phone = "13588877234" , address = "武侯大道" ,pageIndex=1,pageSize=10})">關於2</a>
StringBuilder sb = new StringBuilder();
foreach (var item in values.Keys)
{
if (item.Equals("controller") || item.Equals("action"))
{
continue;
}
var _kvalue = values[item];
sb.Append("&" + item + "=" + _kvalue);
}
string url = controller + "/" + action + "?uck=" + token + sb.ToString();
return new VirtualPathData(this, url);
}
}
}
查看生成url: