国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

asp.net mvc-Controllerl篇 ControllerDescriptor

2024-07-10 12:41:15
字體:
來源:轉載
供稿:網友
現在我們首先來看看ActionInvoker屬性的定義吧:
代碼如下:
public IActionInvoker ActionInvoker {
get {
if (_actionInvoker == null) {
_actionInvoker = CreateActionInvoker();
}
return _actionInvoker;
}
set {
_actionInvoker = value;
}
}
protected virtual IActionInvoker CreateActionInvoker() {
return new ControllerActionInvoker();
}

和TempDataProvider屬性定義一樣,大家一定要習慣這些代碼啊。
而ControllerActionInvoker的定義也很簡單,但是這個類卻不簡單啊。
讓我們來看看你InvokeAction的定義吧:
代碼如下:
public virtual bool InvokeAction(ControllerContext controllerContext, string actionName) {
if (controllerContext == null) {
throw new ArgumentNullException("controllerContext");
}
if (String.IsNullOrEmpty(actionName)) {
throw new ArgumentException(MvcResources.Common_NullOrEmpty, "actionName");
}

ControllerDescriptor controllerDescriptor = GetControllerDescriptor(controllerContext);
ActionDescriptor actionDescriptor = FindAction(controllerContext, controllerDescriptor, actionName);
if (actionDescriptor != null) {
FilterInfo filterInfo = GetFilters(controllerContext, actionDescriptor);

try {
AuthorizationContext authContext = InvokeAuthorizationFilters(controllerContext, filterInfo.AuthorizationFilters, actionDescriptor);
if (authContext.Result != null) {
// the auth filter signaled that we should let it short-circuit the request
InvokeActionResult(controllerContext, authContext.Result);
}
else {
if (controllerContext.Controller.ValidateRequest) {
ValidateRequest(controllerContext);
}

IDictionary<string, object> parameters = GetParameterValues(controllerContext, actionDescriptor);
ActionExecutedContext postActionContext = InvokeActionMethodWithFilters(controllerContext, filterInfo.ActionFilters, actionDescriptor, parameters);
InvokeActionResultWithFilters(controllerContext, filterInfo.ResultFilters, postActionContext.Result);
}
}
catch (ThreadAbortException) {
// This type of exception occurs as a result of Response.Redirect(), but we special-case so that
// the filters don't see this as an error.
throw;
}
catch (Exception ex) {
// something blew up, so execute the exception filters
ExceptionContext exceptionContext = InvokeExceptionFilters(controllerContext, filterInfo.ExceptionFilters, ex);
if (!exceptionContext.ExceptionHandled) {
throw;
}
InvokeActionResult(controllerContext, exceptionContext.Result);
}

return true;
}

// notify controller that no method matched
return false;
}

這個方法里面的內容不可能一次講完的,我們看看 ControllerDescriptor controllerDescriptor = GetControllerDescriptor(controllerContext);
很明顯ControllerDescriptor是Controller實例的一個包裝類。
代碼如下:
protected virtual ControllerDescriptor GetControllerDescriptor(ControllerContext controllerContext) {
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 论坛| 西青区| 类乌齐县| 阿克陶县| 武夷山市| 博湖县| 娱乐| 平定县| 岑巩县| 丁青县| 金坛市| 荣昌县| 华蓥市| 泾川县| 临湘市| 南宁市| 比如县| 泰安市| 慈溪市| 彭水| 丰顺县| 密山市| 聊城市| 潞城市| 吉林省| 登封市| 营山县| 海原县| 临西县| 霍林郭勒市| 金塔县| 大理市| 松潘县| 凤山县| 上思县| 巴楚县| 南宫市| 司法| 南宫市| 凉城县| 遂川县|