Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des Prozesses der Aktionsausführung im .NET MyMVC-Framework

Detaillierte Erläuterung des Prozesses der Aktionsausführung im .NET MyMVC-Framework

Y2J
Y2JOriginal
2017-05-17 11:29:072536Durchsuche

In der GetHandler-Methode von AjaxHandlerFactory wird schließlich ein ActionHandler erstellt, bei dem es sich um einen HttpHandler handelt, der im 15. Schritt der Pipeline aufgerufen wird (Zitat der Sequenz im Blog [Schreiben Sie Ihr eigenes Service-Framework mit Asp.net ] ).

Hinweis: Die GetHandler-Methode von AjaxHandlerFactory wird in Schritt 10 aufgerufen und Schritt 12 bereitet die Sitzung vor (Nicht-In-Prozess-Modus). Daher muss die Verwendung von Session vor Schritt 12 entschieden werden.

Alle Aktionscodes werden im ActionHandler ausgeführt:

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

Der Implementierungsprozess von ExecuteAction ist wie folgt:

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;
    }
}

Ich habe den Aufruf von SetResponseCache( vorher nicht erwähnt ) Timing, dieses Timing ist genau hier: nach der Ausführung der Aktion.
Nachdem der OutputCache festgelegt wurde, ist es an der Zeit, den Rückgabewert zu verarbeiten.

Im vorherigen Code gibt es einen weiteren wichtigen Aufruf:

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

[Verwandte Empfehlungen]

1 🎜>:Version „php Programmer Toolbox“ V0.1 herunterladen2. Kostenloses ASP-Video-Tutorial

3 >Einstiegsbeispiel für .NET MVC

4. Detaillierte Erläuterung des Prozesses zum Suchen von Aktionen in der MyMVC-Box

5. .NET MyMVC-Framework-Tutorial zum Umgang mit Rückgabewerten

6. .NET MyMVC-Framework-Tutorial zum Zuweisen von Werten ​​auf Methoden

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Prozesses der Aktionsausführung im .NET MyMVC-Framework. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn