如何从WebAPIContrib实现RazorViewEngine?

时间:2012-12-07 21:08:29

标签: asp.net-mvc razor asp.net-web-api

我们有以下情况: ContactController:ApiController

现在,ContactController返回联系人模型。

我们希望控制器使用Web应用程序中的相应视图将结果作为剃刀视图传递。

我发现了link

这是Darrel Miller为api控制器提供ViewEngineFormatter的地方。但我不知道如何指定用于返回模型的.cshtml视图。我在ViewEngineFormatter的WriteToStreamAsync方法中有一个断点。它到达那里并抛出一个错误,说它无法将对象转换为View。

这是它抛出错误的地方:

    public override Task WriteToStreamAsync(Type type, object value, Stream stream, System.Net.Http.HttpContent content, TransportContext transportContext)
    {
        var view = (View)value;
        view.WriteToStream(stream, _viewEngine);
        var tcs = new TaskCompletionSource<Stream>();
        tcs.SetResult(stream);
        return tcs.Task;
    }

如果客户端请求中指定的数据类型为“html”,我只是想知道如何让apicontroller返回剃刀视图。

任何帮助将不胜感激......

1 个答案:

答案 0 :(得分:1)

您可能希望查看此https://github.com/WebApiContrib/WebApiContrib.Formatting.RazorViewEngine以获取更新版本。我提交的原始代码自那时起已经更新。

我的原始实现需要将.cshtml文件的流与模型一起传递到View对象。我认为较新的东西使用命名约定来查找模板。我在很长一段时间内使用了这段代码!