Maison >développement back-end >Tutoriel C#.Net >Explication détaillée du processus d'exécution de l'action dans le framework .NET MyMVC

Explication détaillée du processus d'exécution de l'action dans le framework .NET MyMVC

Y2J
Y2Joriginal
2017-05-17 11:29:072561parcourir

Dans la méthode GetHandler d'AjaxHandlerFactory, un ActionHandler sera finalement créé, qui est un HttpHandler, qui sera appelé dans la 15ème étape du pipeline (citant la séquence dans le blog [Écrivez votre propre framework de service avec Asp.net ] ).

Remarque : La méthode GetHandler d'AjaxHandlerFactory est appelée à l'étape 10, et l'étape 12 prépare la Session (mode non-en-processus). Par conséquent, l'utilisation de Session doit être décidée avant l'étape 12.

Tous les codes d'action sont exécutés dans ActionHandler :

internal class ActionHandler : IHttpHandler{    internal InvokeInfo InvokeInfo;    public void ProcessRequest(HttpContext context)
    {        // 调用核心的工具类,执行Action        ActionExecutor.ExecuteAction(context, this.InvokeInfo);
    }

Le processus d'implémentation d'ExecuteAction est le suivant :

internal static void ExecuteAction(HttpContext context, InvokeInfo vkInfo)
{    if( context == null )        throw new ArgumentNullException("context");    if( vkInfo == null )        throw new ArgumentNullException("vkInfo");    // 调用方法    object result = ExecuteActionInternal(context, vkInfo);    // 设置OutputCache    OutputCacheAttribute outputCache = vkInfo.GetOutputCacheSetting();    if( outputCache != null )
        outputCache.SetResponseCache(context);    // 处理方法的返回结果    IActionResult executeResult = result as IActionResult;    if( executeResult != null ) {
        executeResult.Ouput(context);
    }    else {        if( result != null ) {            // 普通类型结果            context.Response.ContentType = "text/plain";
            context.Response.Write(result.ToString());
        }
    }
}internal static object ExecuteActionInternal(HttpContext context, InvokeInfo info)
{    // 准备要传给调用方法的参数    object[] parameters = GetActionCallParameters(context, info.Action);    // 调用方法    if( info.Action.HasReturn )        return info.Action.MethodInfo.Invoke(info.Instance, parameters);    else {
        info.Action.MethodInfo.Invoke(info.Instance, parameters);        return null;
    }
}

Je n'ai pas mentionné l'appel de SetResponseCache (avant ) timing, ce timing est ici : après l'exécution de l'action.
Après avoir défini OutputCache, il est temps de traiter la valeur de retour.

Dans le code précédent, il y a un autre appel important :

// 准备要传给调用方法的参数object[] parameters = GetActionCallParameters(context, info.Action);

[Recommandations associées]

1 Recommandation spécialeTéléchargement de la version V0.1 de "php Programmer Toolbox"

2 Tutoriel vidéo gratuit ASP

3. >Exemple .NET MVC d'entrée de gamme4

Explication détaillée du processus de recherche d'action dans la boîte MyMVC5.

Tutoriel du framework .NET MyMVC sur la façon de gérer les valeurs de retour6

Tutoriel du framework .NET MyMVC sur la façon d'attribuer des valeurs. ​​aux méthodes

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn