3

我们有一个可插入的框架,它返回ActionResult将事物呈现给浏览器的对象。一个最新的要求是我们的插件应该可以从常规的 ASP.NET Web 窗体应用程序中调用。

到目前为止,我已经想出了这个,它适用于非常基本的 ActionResults:

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

您可以使用以下 Web 表单调用上述内容:

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

我还需要做什么来连接所有东西?例如,如果我想返回一个 ViewResult 怎么办?

4

1 回答 1

1

ControllerContext 上没有太多可以伪造的属性。

  • HttpContext - 你已经掌握了这个
  • 控制器- 据我所知,没有标准的 ActionResults 关心这是否为空
  • RequestContext - 如果留空,将自动填充
  • RouteData - 如果留空,将填充一个空集合。

因此,您只需要担心 ActionResult 可能取决于 RouteData 中存在的任意键。只要您填充操作控制器,ViewResult 就应该很高兴,以便它知道在哪里查找视图文件。如果您更改代码以提供具有这些值的 RouteData,则应该没问题。

于 2009-10-24T13:36:17.870 回答