日期:2014-05-16 浏览次数:21067 次
routes.MapRoute(
name: "Default",
url:"{controller}/{action}/{id}",
defaults: new { controller ="Home", action = "Index", id = UrlParameter.Optional }
);
public void Execute(RequestContextrequestContext)
{
var controller = (string)requestContext.RouteData.Values["controller"];
var action =(string)requestContext.RouteData.Values["action"];
requestContext.HttpContext.Response.Write(
string.Format("Controller: {0}, Action: {1}", controller,action));
}
这是最简单的controller创建方式,但是通常不这样做,因为:
我们拿到的是RequestContext对象,需要手动去生成html写到Response里面返回客户端,代码将很难维护。
集成Controller类完成一个controller
一般的,每当我们新建一个controller,都是自动继承controller类,这个类主要帮我们完成两件事情:
1. 会从路由拿到requestContext对象,解析出action以及参数,并调用
2. 提供不同的result(command模式),返回给客户端
另外,我们还可以使用filter,完成不同的crosscutting的concern,后面章节会详细介绍。
由于引入了action和result的概念,使得我们的代码更容易单元测试,起码比我们自己继承IController接口,直接操作RequestContext对象容易很多。
public class DerivedController :Controller {
public ActionResult Index() {
ViewBag.Message = "Hellofrom the DerivedController Index method";
return View("MyView");
}
}View代码:
@{
ViewBag.Title ="MyView";
}
<h2>MyView</h2>
Message: @ViewBag.Message
代码很简单,就是用Viewbag传值到View显示出来,Controller返回了最常用的result,ViewResult。
1. 从context object 直接提取
2. 通过参数传进来(由基类controller完成解析)
3. 通过model binding
|
Request.QueryString |
从Get 请求的url中取 |
|
Request.Form |
从Post请求的表单取 |
|
Request.Cookies |
把值放在请求的cookie里带过来 |
|
RouteData.Route |
从路由表里取注册的路由名 |
|
RouteData.Values |
从路由表获取路由配置的匿名对象 |
|
HttpContext.Cache |
应用程序缓存 |
|
HttpContext.Items |
存储一些值,只在同一请求中使用(可以在httppipeline过程的不同module,handler,以及页面传递值) |
|
HttpContext.Session |
当前用户的session |
|
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
|