Domanda

Abbiamo un framework collegabile che restituisce oggetti ActionResult che rendono le cose su un browser. Un requisito in ritardo è che i nostri plugin dovrebbero essere richiamabili da una normale applicazione ASP.NET Web Forms.

Finora ho trovato questo, che funziona con ActionResults di base:

public class ActionResultTranslator {

    HttpContextBase _context;

    public ActionResultTranslator(HttpContextBase context ) {

        _context = context;
    }

    public void Execute(ActionResult actionResult) {

        ControllerContext fakeContext = new ControllerContext();
        fakeContext.HttpContext = _context;            

        actionResult.ExecuteResult(fakeContext);        
    }
}

Dovresti chiamare quanto sopra da un modulo web con:

protected void Page_Load(object sender, EventArgs e) {
   HttpContextWrapper contextWrapper = new HttpContextWrapper(this.Context);
   var translator = new ActionResultTranslator(contextWrapper);
   translator.Execute(new RedirectResult("http://google.com"));     
}

Cos'altro devo fare per collegare tutto? Ad esempio, se volessi restituire un ViewResult?

È stato utile?

Soluzione

Non ci sono troppe proprietà da falsificare su ControllerContext.

  • HttpContext - Questo è coperto
  • Controller - Per quanto ne so, nessun ActionResults standard si preoccupa se questo viene lasciato nullo
  • RequestContext : verrà popolato automaticamente se lasciato nullo
  • RouteData : verrà popolato con una raccolta vuota se lasciato nullo.

Quindi non ti resta che preoccuparti che ActionResult possa dipendere dalla presenza di chiavi arbitrarie in RouteData. Un ViewResult dovrebbe essere felice finché si popolano azione e controller in modo che sappia dove cercare il file di visualizzazione. Se modifichi il codice per fornire un RouteData con tali valori, dovresti essere OK.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top