【问题标题】:Returning a Razor (cshtml) page from an IHttpHandler without redirection从 IHttpHandler 返回 Razor (cshtml) 页面而不进行重定向
【发布时间】:2014-02-13 07:55:33
【问题描述】:

我有一个 ASP.net MVC 项目,我承认我对 MS 实现 MVC 的方式不太感兴趣,因此将项目剥离到最低限度。我没有定义任何路由,而是在web.config 中有一个DefaultDocument 条目,它指向一个实现IHttpHandler 的类。

从我的IHttpHandler 类中,我想输出一个 Razor .cshtml 文件,我不希望创建到 cshtml 文件的路由条目,因此我不能简单地将用户重定向到 .cshtml 文件。我发现很多资源都在谈论 PageParser.GetCompiledPageInstance,但这似乎是针对 aspx 文件而不是 Razor 视图引擎。

那么,在将 .cshtml 文件从我的 IHttpHandler 类输出到 HttpContext 时,我应该对哪些类感兴趣?

public class Main : IHttpHandler{
    public void ProcessRequest(HttpContext context){
        //
    }
}

【问题讨论】:

    标签: asp.net-mvc razor ihttphandler


    【解决方案1】:

    看来我一直在寻找错误的东西 - 秘密短语是:

    将 razor 视图渲染为字符串

    下面的代码看起来效果很好:

    public static string GetRazorViewAsString(object model, string filePath)
    {
        var st = new StringWriter();
        var context = new HttpContextWrapper(HttpContext.Current);
        var routeData = new RouteData();
        var controllerContext = new ControllerContext(new RequestContext(context, routeData), new FakeController());
        var razor = new RazorView(controllerContext, filePath, null, false, null);
        razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), st), st);
        return st.ToString();
    }
    

    来自http://forums.asp.net/post/5333141.aspx的代码

    【讨论】:

      猜你喜欢
      • 2013-07-13
      • 2021-11-10
      • 2016-12-24
      • 2017-09-15
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 2019-11-20
      • 2019-02-04
      相关资源
      最近更新 更多