說明: 解決另外一個不合理之處:通過控制器完成處理

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的更多相关文章

  1. 步步為營-96-MyMVC2

    說明:地址欄中的URL還存在一些不足之處 地址欄中最好能是http"www.sss.com/asdf/aaa 1.1 模擬路由的原理:創建Routing文件夾,并添加URLRoutingMo ...

  2. 步步為營-95-MyMVC 1.0

    說明:通過自己編寫MyMVC以便於對MVC內容實現機制有更深刻的認識 1.1:創建MyMVC項目,刪除無關引用,只保留system 和 system.web.同時該項目中以後添加一些文件后也要刪除無關 ...

  3. 步步為營-98-MyAPI

    1 通过NuGet程序管理包添加  Microsoft Asp.Net webAPI 2.2 的引用 2 添加两个文件夹Controllers和Models 2.1 在本地模拟数据库,所以在Model ...

  4. From COM to COM 侯捷 1998.06.12

    摘要: 本文簡介 C++ Object Model 和 Component Object Model 的基本概念,並引介四本書籍: 1. Inside The C++ Object Model 2. ...

  5. 超时空英雄传说2复仇魔神完全攻略&秘技

    ╓─╥───────────────────────────────────────────────────╥─╖ ║ ║ 超 時 空 英 雄 傳 說 2 ║ ║ ║ ║ --復 仇 魔 神-- ║ ...

  6. H TC並沒有成為下一個摩托羅拉或諾基亞。

    關於2014年第四季度,H T C在三季度財報說明中提到,“年度旗艦H T CO ne(M 8)與中端機型H T C D esire系列在競爭日趨激烈的智能手機市場保持穩定的銷售,市占率有所提升,延續 ...

  7. 一步步教你读懂NET中IL(附带图)

    一步步教你读懂NET中IL(附带图) 接触NET也有1年左右的时间了,NET的内部实现对我产生了很大的吸引力,在msdn上找到一篇关于NET的IL代码的图解说明,写的挺不错的.个人觉得:能对这些底部的 ...

  8. 一步步教你轻松学主成分分析PCA降维算法

    一步步教你轻松学主成分分析PCA降维算法 (白宁超 2018年10月22日10:14:18) 摘要:主成分分析(英语:Principal components analysis,PCA)是一种分析.简 ...

  9. 一步步教你轻松学关联规则Apriori算法

    一步步教你轻松学关联规则Apriori算法 (白宁超 2018年10月22日09:51:05) 摘要:先验算法(Apriori Algorithm)是关联规则学习的经典算法之一,常常应用在商业等诸多领 ...

随机推荐

  1. 第一节,Windows10下Darkflow的安装与测试(YOLO)

    1.下载Darkflow:https://github.com/thtrieu/darkflow 2.解压到目录,打开cmd,进入到解压的目录,并输入python setup.py build_ext ...

  2. PCA算法浅析

    最近频繁在论文中看到「PCA」的影子,所以今天决定好好把「PCA」的原理和算法过程弄清楚. 「PCA」是什么 PCA,又称主成分分析,英文全称「Principal Components Analysi ...

  3. SpringSecurity如何在代码中获取认证用户信息

    ⒈ public Object getCurrentUser(){ return SecurityContextHolder.getContext().getAuthentication(); } ⒉ ...

  4. page.isvalid

    背景 看到这个标题,想了半天,为啥用的.应该是当初前台要动态增加行这个事情,当初用.net真是用傻了,竟然对html.aspx原理不大清楚,对于html也想着后台生成.真是弱智啊.谈到这里,想到c#这 ...

  5. 通过zabbix自带api进行主机的批量添加操作

    通过zabbix自带api进行批量添加主机 我们需要监控一台服务器的时候,当客户端装好zabbix-agent端并正确配置以后,需要在zabbix-server的web gui界面进行添加zabbix ...

  6. dig常用命令

    Dig是域信息搜索器的简称(Domain Information Groper),使用dig命令可以执行查询域名相关的任务. ###1. 理解dig的输出结果 $ dig chenrongrong.i ...

  7. 解决访问swaggerUI接口文档显示basic-error-controler问题

    问题描述 使用swagger生成接口文档后,访问http://localhost:8888/swagger-ui.html#/,显示如下: 有些强迫症的我,感觉看起来很不舒服,结果百度了好久,找到解决 ...

  8. Windws Server 2008 R2 WEB环境配置之IIS7/IIS7.5+FastCGI+PHP 5.6.4+MYSQL+phpMyAdmin

    本篇为WEB环境配置的汇总篇,其中PHP以FASTCGI方式来运行,这种方式性能更高.经过配置后,我们的服务器将同时可以运行PHP和.NET的程序,属称全能服务器.所有配置可以根据自身实际需要进行增减 ...

  9. vue中引入js,然后new js里的方法

    阿里云Web播放器Web端使用SDK说明:https://help.aliyun.com/document_detail/51991.html?spm=5176.11065259.1996646101 ...

  10. 一篇文章教你读懂UI绘制流程

    最近有好多人问我Android没信心去深造了,找不到好的工作,其实我以一个他们进行回复,发现他们主要是内心比较浮躁,要知道技术行业永远缺少的是高手.建议先阅读浅谈Android发展趋势分析,在工作中, ...