1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 using Zhyj.Logger.Interface; 7 namespace WebApp.Controllers 8 { 9 public class HomeController : Controller 10 { 11 ILogger logger = null; 12 public HomeController() { 13 this.logger = DependencyResolver.Current.GetService<ILogger>(); 14 } 15 16 public ActionResult Home() 17 { 18 /* 19 * 404的解析规则: 20 * /Index : 解析到(调用) /Home/Index 21 * /Home/Index : 路由地址,不进行解析 22 * /*Plugin/Index : 解析到 /xxPlugin/Home/Index 23 * /*.aspx : 调用cms解析引擎 24 * 25 * 26 * **/ 27 System.Collections.Specialized.NameValueCollection header = Request.Headers; 28 string urlpath = header["urlpath"]; 29 string referUrlpath = header["referUrlpath"]; 30 string []path={}; 31 if (!string.IsNullOrEmpty(urlpath)) 32 { 33 //Split函数的StringSplitOptions.RemoveEmptyEntries设置清除数组里面的空值 34 path= urlpath.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); 35 } 36 if (path.Length==1) 37 { 38 //Server.TransferRequest返回特定服务器上的空白页,string.Format格式化字符串 39 Server.TransferRequest(string.Format("/Default/{0}", path[0]),true,null,header); 40 return null; 41 //枚举 42 }else if(path.Length==2 && path[0].EndsWith("Plugin",StringComparison.CurrentCultureIgnoreCase)){ 43 44 Server.TransferRequest(string.Format("/{0}/Default/{1}", path[0], path[1]), true, null, header); 45 return null; 46 } 47 else if (path.Length > 0 && urlpath.EndsWith(".aspx", StringComparison.CurrentCultureIgnoreCase)) { 48 //TODO:解析cms 49 return null; 50 } 51 52 53 if (!string.IsNullOrEmpty(Request["statusCode"]) && Request["statusCode"].Equals("404")) 54 { 55 logger.Info("接受到404,处理跳转"); 56 Response.Write("404<br/>"+Request.Path); 57 58 }else if (!string.IsNullOrEmpty(Request["statusCode"]) && Request["statusCode"].Equals("500")) 59 { 60 logger.Info("接受到500,处理跳转"); 61 Response.Write("500<br/>" + Request.Path); 62 63 } 64 else 65 { 66 logger.Info("正常访问"); 67 Response.Write(Request.Path); 68 69 } 70 return View(); 71 } 72 public ActionResult Index() { 73 //logger.Info("Home.Index"); 74 75 return Redirect("/index.aspx"); 76 } 77 78 79 80 } 81 }
有谁有空的。。。我看不懂上面的代码(╥╯^╰╥)
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Zhyj.Logger.Interface; namespace WebApp.Controllers { public class HomeController : Controller { ILogger logger = null;//定义一个借口的实例(根据下文来看这个接口主要是记录日志信息的) public HomeController()//这是HomeController这个控制的构造函数(不懂什么是构造函数就去百度) { this.logger = DependencyResolver.Current.GetService<ILogger>();//在当前的构造函数里对当前控制器类的接口实例赋值 } public ActionResult Home() { /* * 404的解析规则: * /Index : 解析到(调用) /Home/Index * /Home/Index : 路由地址,不进行解析 * /*Plugin/Index : 解析到 /xxPlugin/Home/Index * /*.aspx : 调用cms解析引擎 * * * **/ System.Collections.Specialized.NameValueCollection header = Request.Headers;//获取到当前请求的头部对象,这个对象里通常包含请求的URL,以及请求方式,和请求的字符串等信息 string urlpath = header["urlpath"]; string referUrlpath = header["referUrlpath"]; string[] path = { }; if (!string.IsNullOrEmpty(urlpath))//当获取到的字符串非空 的时候去取路径,并赋值给path数组 { //Split函数的StringSplitOptions.RemoveEmptyEntries设置清除数组里面的空值 path = urlpath.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); } if (path.Length == 1)//PS:暂时不明白path.Length == 1表示什么,你可以断点调试一下,一步一步看值的情况来分析这层意思,根据下文,这里估计是没得到想要的URL { //Server.TransferRequest返回特定服务器上的空白页,string.Format格式化字符串 Server.TransferRequest(string.Format("/Default/{0}", path[0]), true, null, header); return null; //枚举 } else if (path.Length == 2 && path[0].EndsWith("Plugin", StringComparison.CurrentCultureIgnoreCase)) { Server.TransferRequest(string.Format("/{0}/Default/{1}", path[0], path[1]), true, null, header); return null; } else if (path.Length > 0 && urlpath.EndsWith(".aspx", StringComparison.CurrentCultureIgnoreCase)) { //TODO:解析cms return null; } //上面几个if应该是夹杂着你们的业务在里面 //下面几个是判断请求的状态码的值,来做对应的跳转操作 if (!string.IsNullOrEmpty(Request["statusCode"]) && Request["statusCode"].Equals("404")) { logger.Info("接受到404,处理跳转"); Response.Write("404<br/>" + Request.Path); } else if (!string.IsNullOrEmpty(Request["statusCode"]) && Request["statusCode"].Equals("500")) { logger.Info("接受到500,处理跳转"); Response.Write("500<br/>" + Request.Path); } else { logger.Info("正常访问"); Response.Write(Request.Path); } return View(); } public ActionResult Index() { //logger.Info("Home.Index"); return Redirect("/index.aspx"); } } }
只能帮你到这儿了,我会的也不多。不过有个方式值得你思索,先了解整个控制器是做什么的,看里面的代码的时候结合上下文去看,就好懂一些
谢谢