ASP.NET includes the following types for MVC development:
-
IController. 这个类定义了 controller 类的约定。
Controller. 这是一个controller 基类,提供基本的MVC处理。
-
Note
要对控制器和控制器action进行安全访问你可以使用 PrincipalPermissionAttribute 类.
所有的controller类都要以“Controller”作为命名的后缀,而且都必需继承自"Controller"基类。
MVC framework(MVC2)认为所有的公共方法都是action方法。所以,如果你你的控制器类中包含一个不是action方法的public方法,你必需用NonActionAttribute特性来标记它。
Action方法参数
默认情况下,action方法的参数是从请求的数据集合中检索的。数据集合包括 data,query string,cookie中的名/值对。
controller基类定位action方法,并基于RouteData实例来决定那些参数用于该方法。如果参数值不能被解析,引用类型或者可空类型则传递NULL值,否则抛出一个异常。
有好几种途径在控制类中的action方法中来获取URL参数值。Controller基类暴露Request和Response对象在action方法中使用。这两个对象和HttpRequest,HttpResponse有相同的意思。有一点重要的不同就是,控制器类中的Request和Response对象是基于System.Web.IHttpRequest和System.Web.IHttpResponse接口的。这个接口是他们很容易来创建mock对象,使它很容易为控制器类创建单元测试。
处理未定义的Action名
Controller基类通过调用HandleUnknowAction方法来处理一个未知的action方法名。默认是实现Controller基类返回一个HTTP 404状态码。
你可以为URL中引用到的action但实际上并不存在该action方法的情况设置默认的处理程序。下面的示例显示了重写HandleUnknowAction方法并重定向到一个"serch"页面:
// Redirect to a search page where the unknown action is
// the search query. Determine when to show the search page
// based on the result of calling a ShouldShowSearch() method.
if (ShouldShowSearch(action) == true)
{
RedirectToAction("search", action );
return;
}
base.HandleUnknownError(action);
}