步步為營-97-MyMVC3
說明: 解決另外一個不合理之處:通過控制器完成處理
1:在mvc文件夾下面添加一個工廠類文件DefaultControllerFactory


1.2進一步升級為抽象工廠

2 下一步如何規範Controller的內容

2.1 創建一個類RequestContext

2.2 醜行出一個接口

,2.3 創建一個抽象方法實現這個接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web; namespace YK.Simple.Mvc1.Mvc
{
public abstract class ControllerBase:IController
{
protected HttpContext Context { get; set; }
protected IDictionary<string, object> RouteData { set; get; } public virtual void Execute(RequestContext context)
{
Context = context.HttpContext;
RouteData = context.RouteData;
//獲取ActionName
var actionName = RouteData["action"].ToString(); #region 找到Action方法對象
//先找到黨慶類中的所有方法
var methods = this.GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
MethodInfo method = null;
foreach (var item in methods)
{
if (item.Name.Equals(actionName, StringComparison.InvariantCultureIgnoreCase))
{
method = item;
break;
}
}
if (method==null)
{
throw new HttpException(, "Not Found");
}
#endregion
List<object> values = new List<object>(); var parameters = method.GetParameters();
foreach (var parameter in parameters)
{
var name = parameter.Name;
var type = parameter.ParameterType;
//參數來源 1:form 2:queryString 3:RouteData
var value = Context.Request[name];
if (string.IsNullOrEmpty(value))
{
value =RouteData.ContainsKey(name)?RouteData[name].ToString():null;
}
if (!string.IsNullOrEmpty(value))
{
//值類型轉換
values.Add(Convert.ChangeType(value, type));
}
else {
values.Add(null);
}
}
method.Invoke(this, values.ToArray());
} }
}
2.4 創建控制器

運行效果

3 最後我們不能讓所有的Action都以void的形式返回
3.1 添加ActionResult

3.2 添加RequestContext類

3.3 修改ControllerBase

3.4

3.5 運行效果

步步為營-97-MyMVC3的更多相关文章
- 步步為營-96-MyMVC2
說明:地址欄中的URL還存在一些不足之處 地址欄中最好能是http"www.sss.com/asdf/aaa 1.1 模擬路由的原理:創建Routing文件夾,并添加URLRoutingMo ...
- 步步為營-95-MyMVC 1.0
說明:通過自己編寫MyMVC以便於對MVC內容實現機制有更深刻的認識 1.1:創建MyMVC項目,刪除無關引用,只保留system 和 system.web.同時該項目中以後添加一些文件后也要刪除無關 ...
- 步步為營-98-MyAPI
1 通过NuGet程序管理包添加 Microsoft Asp.Net webAPI 2.2 的引用 2 添加两个文件夹Controllers和Models 2.1 在本地模拟数据库,所以在Model ...
- From COM to COM 侯捷 1998.06.12
摘要: 本文簡介 C++ Object Model 和 Component Object Model 的基本概念,並引介四本書籍: 1. Inside The C++ Object Model 2. ...
- 超时空英雄传说2复仇魔神完全攻略&秘技
╓─╥───────────────────────────────────────────────────╥─╖ ║ ║ 超 時 空 英 雄 傳 說 2 ║ ║ ║ ║ --復 仇 魔 神-- ║ ...
- H TC並沒有成為下一個摩托羅拉或諾基亞。
關於2014年第四季度,H T C在三季度財報說明中提到,“年度旗艦H T CO ne(M 8)與中端機型H T C D esire系列在競爭日趨激烈的智能手機市場保持穩定的銷售,市占率有所提升,延續 ...
- 一步步教你读懂NET中IL(附带图)
一步步教你读懂NET中IL(附带图) 接触NET也有1年左右的时间了,NET的内部实现对我产生了很大的吸引力,在msdn上找到一篇关于NET的IL代码的图解说明,写的挺不错的.个人觉得:能对这些底部的 ...
- 一步步教你轻松学主成分分析PCA降维算法
一步步教你轻松学主成分分析PCA降维算法 (白宁超 2018年10月22日10:14:18) 摘要:主成分分析(英语:Principal components analysis,PCA)是一种分析.简 ...
- 一步步教你轻松学关联规则Apriori算法
一步步教你轻松学关联规则Apriori算法 (白宁超 2018年10月22日09:51:05) 摘要:先验算法(Apriori Algorithm)是关联规则学习的经典算法之一,常常应用在商业等诸多领 ...
随机推荐
- neutron-----openstack网络操作
#查看子网 openstack subnet list #删除子网 openstack subnet delete name/id #查看网络 openstack network list #删除网络 ...
- Learning Spread-out Local Feature Descriptors
论文Learning Spread-out Local Feature Descriptors 为什么介绍此文:引入了一种正则化手段,结合其他网络的损失函数,尤其是最新cvpr 2018的hardne ...
- Hash算法【转】
转自:http://www.cnblogs.com/wangjy/archive/2011/09/08/2171638.html Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度 ...
- 记录一段QQ关于 UNIGUI 的Session 时间设定
记录一段QQ关于 UNIGUI 的Session 时间设定,来自[台中]cmj(31365722): [重點說明] 1.UniGUI的Session就是UniMainModule. 2.Sess ...
- linux服务器ntp客户端配置【转】
转自:https://www.cnblogs.com/kerrycode/archive/2015/08/20/4744804.html 在Linux系统中,为了避免主机时间因为在长时间运行下所导致的 ...
- python去除字符串里的非数字
filter(lambda ch: ch in ‘0123456789.’, crazystring)
- VS2013 VS2015 VS2017调试出现无法启动iis express web服务器
最近老是遇到这个问题,天天如此,烦死人,网上答案繁多,但是都解决不了,也是由于各种环境不同导致的,这里把几种解决方法都记录下 一.其他项目都可以,就这么一个不行 因为其他项目都可以,就这么一个不行,所 ...
- win32编程中消息循环和WndProc()窗口过程函数
原文地址:https://blog.csdn.net/zxxSsdsd/article/details/45504383 在win32程序的消息循环函数中 while (GetMessage (&a ...
- Fiddler对https抓包时,提示"HTTPS decryption is disabled."
安装了fiddlercertmaker.exe 后,对 https://www.baidu.com 进行抓包时,右侧界面提示"HTTPS decryption is disabled.&qu ...
- FS G729转码测试记录
默认情况下Freeswitch自带的G729模块是pass-through-并不支持转码.我们决定添加一个支持G729转码的模块到Freeswitch.参考自 8000HZ. 一.安装支持转码的G72 ...