2012-12-07 25 views
1

我們有以下情況: ContactController:ApiController如何從WebAPIContrib實現RazorViewEngine?

現在ContactController返回Contact模型。

我們希望控制器通過使用Web應用程序的相應視圖將結果作爲剃刀視圖傳遞。

我發現這個link

這是達雷爾 - 米勒有API控制器一ViewEngineFormatter。但我不知道如何指定哪個.cshtml視圖用於返回的模型。我在ViewEngineFormatter的WriteToStreamAsync方法中有一個斷點。它到達那裏,並拋出一個錯誤,說它不能將對象轉換爲視圖。

在此處,它拋出一個錯誤:

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

我只是缺少如何獲得apicontroller即可返回剃刀視圖,如果客戶機請求中指定的數據類型是「HTML」。

任何幫助,將不勝感激......

回答

1

你可能想看看這個https://github.com/WebApiContrib/WebApiContrib.Formatting.RazorViewEngine了更多的最新版本。從那以後,我提交的原始代碼已經大量更新。

我的原始實現需要將.cshtml文件的流與模型一起傳遞到View對象中。我認爲較新的東西使用命名約定來查找模板。我在這段代碼中工作了很長一段時間!

+0

有什麼辦法可以預編譯剃刀視圖,以便我們不必執行FileIO操作來呈現數據? – safriss