亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

極簡MVC的實現

2019-11-17 01:27:09
字體:
來源:轉載
供稿:網友

極簡MVC的實現

我們來打造一個簡單的專用于json調用的mvc實現,最終會將如下的C#代碼暴露給js調用(代碼在最后面有下載):

public class UserController    {        public static Json GetUser(   [HttpQueryString("x_user")]                                        int userId,                                        [HttpQueryString("msg")]                                        string msg)        {            Json json = new Json();            json.IsSuccess = true;            json.Data = new {                 Field1=userId,                Field2=msg            };            return json;        }    }

上面這些用到的class,如:Json, HttpQueryString之類的都是自己寫的,不是asp.net mvc的類。

(HttpQueryString("x_user")代表修飾的變量userId的值是從QueryString集合中獲取的,并且key為x_user,怎么樣,夠容易理解的吧)

配置文件中還要加入相應的HandlerFactory(代表符合Ajax/*.ashx的路徑都會被MvcHandlerFactory處理,目前只實現了JsonHttpHandler):

<httpHandlers>            <add type="Mvc.Factories.MvcHandlerFactory, Mvc" path="ajax/*.ashx" verb="*"/></httpHandlers>

入口找到了,就好辦了,我們來看看這個MvcHandlerFactory:

public class MvcHandlerFactory:IHttpHandlerFactory    {        public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)        {            ControllerDescriptor controllerDescriptor = ControllerFactory.Resolve(context);      //解析當前請求的ControllerDescriptor            if (controllerDescriptor == null)                throw new Exception("沒有找到相應的Controller");            MethodDescriptor methodDescriptor = MethodFactory.Resolve(controllerDescriptor, context);//解析當前請求的MethodDescriptor            if (methodDescriptor == null)                throw new Exception("沒有找到相應的調用方法");            IHttpHandler handler = new JsonHttpHandler(controllerDescriptor, methodDescriptor);//由于目前只做了Json處理器,因此直接硬編碼此類            return handler;        }        public void ReleaseHandler(IHttpHandler handler)        {            throw new NotImplementedException();        }    }

完成下面這些工作:

  • 根據context請求解析出目標Controller
  • 根據目標Controller以及context請求解析出目標函數Method
  • 在解析Method時,內部還解析了這個Method所涉及到的參數、取值位置(從Request.Form、Request.QueryString, Cookie, Headers等位置,或者Any(Request.Params))、key等

再來看看JsonHttpHandler:

public class JsonHttpHandler:IHttpHandler    {        PRivate ControllerDescriptor controllerDescriptor;        private MethodDescriptor methodDescriptor;        private javaScriptSerializer jsonSerializer = new JavascriptSerializer();//用了ms的json序列化器        public JsonHttpHandler(ControllerDescriptor controllerDescriptor, MethodDescriptor methodDescriptor)        {            this.controllerDescriptor = controllerDescriptor;            this.methodDescriptor = methodDescriptor;        }        public bool IsReusable//無所謂里面的返回值,ms用不到這個value,都是false        {            get { throw new NotImplementedException(); }        }                public void ProcessRequest(HttpContext context)        {            MethodInfo mi = this.controllerDescriptor.ControllerType.GetMethod(this.methodDescriptor.MethodName);            List<object> parameters = new List<object>();            foreach (var pd in this.methodDescriptor.ParameterDescriptors)            {                object value = ParameterParser.GetValue(context, pd);//遍歷all參數,并且從相應的location取值                parameters.Add(value);            }                        object result=mi.Invoke(null, parameters.ToArray());//調用具體Controller中的函數,由于是靜態函數,因此傳入了null作為instance            string json=jsonSerializer.Serialize(result);//序列化為json字符串            context.Response.Write(json);        }    }

還需要在global中增加搜索所有Controller后綴的class到注冊Dictionary中,這里就是些遍歷,大家可以看代碼,代碼就不貼了

目前這個框架是簡陋的,不過也看到了有很多能插入的點,比如[RequestLimit(HttpRequestType.Post)]等,大家懂的。

一旦自己能深入到框架內部,許多難題就不再是難題了,可以很快解決。

附上vs2012寫的代碼(家里電腦只有vs2012,沒有vs2010...)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩美女av在线免费观看| 国产精品一区二区性色av| 亚洲国产精品悠悠久久琪琪| 精品夜色国产国偷在线| 久久免费视频观看| 97国产精品视频| 日韩成人在线播放| 亚洲变态欧美另类捆绑| 午夜剧场成人观在线视频免费观看| 国产免费一区二区三区在线能观看| 国产精品视频内| 中文字幕亚洲无线码a| 国产日韩精品视频| 97在线看免费观看视频在线观看| 国产日韩欧美在线| 91九色国产社区在线观看| 粗暴蹂躏中文一区二区三区| 亚洲精品免费av| 国产精品自产拍高潮在线观看| zzijzzij亚洲日本成熟少妇| 欧美日韩国产二区| 国产婷婷成人久久av免费高清| 日韩69视频在线观看| 欧美成人免费va影院高清| 国产欧美亚洲视频| 国产丝袜一区二区| 国产色视频一区| 欧美激情极品视频| 九九久久国产精品| 揄拍成人国产精品视频| 国产精品久在线观看| 午夜精品蜜臀一区二区三区免费| 日韩av资源在线播放| 久久色免费在线视频| 国产精品久久77777| 日韩视频在线免费| 在线精品国产成人综合| 国产精品三级久久久久久电影| 日韩欧美国产一区二区| 97成人精品视频在线观看| 亚洲欧美精品一区二区| 久久久久久久久久久91| 亚洲国产精品一区二区三区| 精品久久久久久久久久| 亚洲黄色成人网| 日韩在线观看av| 欧美裸体xxxx极品少妇软件| 欧美另类在线观看| 亚洲成人激情视频| 夜夜躁日日躁狠狠久久88av| 欧美亚洲第一区| 日本伊人精品一区二区三区介绍| 欧美精品一本久久男人的天堂| 亚洲图中文字幕| 亚洲第一网站男人都懂| 国产一区二区三区在线免费观看| 精品性高朝久久久久久久| 亚洲成人激情在线观看| 中文字幕亚洲综合久久| 欧美精品18videos性欧| 亚洲国产美女精品久久久久∴| 91精品国产高清久久久久久| 欧美自拍视频在线观看| 一本一本久久a久久精品综合小说| 久久成人精品视频| 亚洲欧美制服丝袜| 成人精品网站在线观看| 久久精品国产清自在天天线| 欧洲亚洲免费在线| 国外成人免费在线播放| 亚洲精品久久久久久久久久久久| 日韩理论片久久| 日韩国产一区三区| 亚洲成色999久久网站| 日韩视频免费中文字幕| 亚洲高清av在线| 亚洲国产一区二区三区在线观看| 久久99精品国产99久久6尤物| 久久夜色撩人精品| 久久国产色av| 国产日韩在线视频| 菠萝蜜影院一区二区免费| 成人性生交xxxxx网站| 国产精品444| 日韩欧美aaa| 亚洲欧美视频在线| 久久青草福利网站| 国产精品狼人色视频一区| 久久久久久18| 久久久久一本一区二区青青蜜月| 欧美诱惑福利视频| 国产精品极品尤物在线观看| 国产日韩精品一区二区| 日本国产一区二区三区| 国产高清视频一区三区| 久久精视频免费在线久久完整在线看| 中文字幕亚洲一区二区三区五十路| 国产精品久久久久久搜索| 岛国精品视频在线播放| 中文字幕亚洲图片| 色777狠狠综合秋免鲁丝| 97色在线视频| 亚洲激情电影中文字幕| 久久久久久亚洲精品不卡| 美日韩精品免费视频| 久久免费观看视频| 国产精品日韩精品| 精品久久久在线观看| 久久青草精品视频免费观看| 国产视频自拍一区| 亚洲精品国产成人| 1769国内精品视频在线播放| 久久精品亚洲一区| 成人免费网站在线观看| 久久久女人电视剧免费播放下载| 国产在线观看精品一区二区三区| 国产精品电影在线观看| 国产91久久婷婷一区二区| 国产精品永久免费| 国产精品第七影院| 亚洲一区av在线播放| 国产精品免费观看在线| 91美女片黄在线观| 久久精品国产一区二区三区| 欧美高清视频一区二区| 51色欧美片视频在线观看| 中文字幕亚洲欧美在线| 久久国产精品久久久久久久久久| 精品国产一区二区三区久久久狼| 久久精品99无色码中文字幕| 亚洲字幕在线观看| 久久久久久免费精品| 国产精自产拍久久久久久| 亚洲最新在线视频| 精品一区二区三区四区| 色狠狠久久aa北条麻妃| 亚洲欧美日韩一区二区三区在线| 国产亚洲欧美日韩一区二区| 国产精品色午夜在线观看| 热re99久久精品国产66热| 亚洲国产女人aaa毛片在线| 国产在线视频一区| 91影院在线免费观看视频| 欧美成人在线网站| 欧美亚洲国产精品| 国产精品一区久久久| 欧美国产在线电影| 久久韩国免费视频| 欧美最猛性xxxxx亚洲精品| 国产福利精品av综合导导航| 国产欧美日韩最新| 伊人久久免费视频| 亚洲成色777777在线观看影院| 日韩国产欧美精品在线| 亚洲精品欧美日韩专区| 国产午夜精品视频免费不卡69堂| 亚洲风情亚aⅴ在线发布| 国产69精品久久久久9999| 亚洲影院色在线观看免费| 亚洲人成伊人成综合网久久久| 亚洲深夜福利在线| 久久久国产一区| 亚洲美女黄色片| 亚洲天堂色网站|