首页 新闻 搜索 专区 学院

除了最后定向追到index页面可以看得懂别的都懵

0
悬赏园豆:20 [已解决问题] 解决于 2018-03-24 16:58
 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 }

有谁有空的。。。我看不懂上面的代码(╥╯^╰╥)

cocoyoona的主页 cocoyoona | 初学一级 | 园豆:20
提问于:2018-03-19 11:19
< >
分享
最佳答案
0
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");
        }



    }
}

只能帮你到这儿了,我会的也不多。不过有个方式值得你思索,先了解整个控制器是做什么的,看里面的代码的时候结合上下文去看,就好懂一些

收获园豆:20
默卿 | 老鸟四级 |园豆:4545 | 2018-03-19 12:04

谢谢

cocoyoona | 园豆:20 (初学一级) | 2018-03-19 12:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册