您的位置:首页 > 编程语言 > ASP

asp.net mvc 自定义路由及其伪静态设置

2017-08-14 10:07 459 查看
1.新建一个类CmsRoute继承于RouteBase

public class CmsRoute: RouteBase
{
public override RouteData GetRouteData(HttpContextBase httpContext)
{
var data = new RouteData(this, new MvcRouteHandler());
string RequestUrl = httpContext.Request.RawUrl;
if (!string.IsNullOrEmpty(RequestUrl))
{
RequestUrl = RequestUrl.ToString();
}
String[] arrTiem = RequestUrl.Split('/');//根据请求路径而进行的分割 home/index/gg.html 或 home/index/gg
if (arrTiem.Length>=2)
{
//开始路由的基本配置
data.Values.Add("controller", arrTiem[1]);
data.Values.Add("action", arrTiem[2].Split('.')[0]);
//data.Values.Add("gg", gg);//额外参数
//区域配置
data.Values.Add("namespaces", new[] { "WebApplication2.Areas.tuku.Controllers" });
data.DataTokens.Add("area", "tuku");
return data;
}

return null;//不匹配走默认。
}

public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
throw new NotImplementedException();
}
}
2.在RouteConfig中注册此路由

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new CmsRoute());
routes.MapRoute(    //Admin Route
"tuku", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
, namespaces: new[] { "WebApplication2.Areas.tuku.Controllers" }
).DataTokens.Add("area", "tuku");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
3.伪静态web.config设置
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true"></modules>
</system.webServer>


ps:这样设置伪静态自定义路由的方法总有些不好用。运用在项目上,总是不稳定,估计是哪里配置问题。坑爹啊简直。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  asp.net mvc