2012-07-29 69 views
3

所以,我一直在玩ASP.net MVC4和新的WebAPI過去幾天。在開始一個新應用程序時,我總是會做的第一件事是將<trust level="Medium" />放入我的Web.config中,這樣我就可以確定我的應用程序可以在大多數主機上運行。ASP.net MVC4 WebAPI JSON中信任

通常,如果我使用股票微軟的東西一切正常,沒有問題。但今晚我在Brad Wilson的Webstack of Love presentation之後遇到問題。我所有的AJAX調用都返回一個Server 500錯誤。但是,當我直接在瀏覽器中打開WebAPI時,它將以XML格式返回所有內容。

因此,我認爲使用WebAPI控制器序列化爲JSON是導致問題的原因。 我的問題是如何解決這個問題?

微軟教導共享主機安全地開展工作並將其鎖定到中等信任度,然後創建在中等信任度下無法使用的新Web技術。當它是最終版本並且二進制文件安裝在GAC中時,也許一切都會好起來的?共享主機可能需要幾個月才能升級到最新,最好的版本。

這似乎是最大的問題通常是反射-90%以上的東西我嘗試過,不會在中等信任上運行是由於這個(例如,我喜歡用AutoMapper代替手編碼ViewModel =>實體映射)。有沒有辦法將反射限制到應用程序中的程序集,以便它可以成爲中等信任功能集的一部分,並使此問題成爲過去?


當我發現Application_Error事件甚至沒有在我的Global.asax中觸發時,我在IIS上設置了失敗的請求跟蹤。這是拋出的異常。不知道如何獲得更多的細節。

Warning -MODULE_SET_RESPONSE_ERROR_STATUS 
ModuleName ManagedPipelineHandler 
Notification 128 
HttpStatus 500 
HttpReason Internal Server Error 
HttpSubStatus 0 
ErrorCode 0 
ConfigExceptionInfo 
Notification EXECUTE_REQUEST_HANDLER 
ErrorCode The operation completed successfully. (0x0) 

鏈接sample project displaying the issue。也包含在「測試」目錄下的是我的提琴手測試的截圖:XML-fiddle.png & JSON-fiddle.png。

回答

0

我的問題與循環關係的實體序列化(在這種情況下,國家=>國家,州=>國家)。 JSON序列化程序無法處理這導致請求JSON時出現500錯誤。

我經常直接使用實體來嘲諷事物並獲取原型。我總是計劃使用不同的視圖模型,但我想知道發生了什麼以及它失敗的原因。

基蘭Challa在我的ASP.net forums question答案幫助我,這是發生的歷史的錯誤:「的RelationshipManager對象無法被序列化時RelationshipManager屬於未實現IEntityWithRelationships一個實體對象時,此類型的對象不能被序列化。 「

然後,我把它帶到了johnnycode.com上的Serializing Circular References with JSON.Net and Entity Framework

1

Web API在中等信任下工作得很好。此外,自RC版本以來,它不再部署到GAC。您可以將Web API dll複製到服務器上並引用它們(或者只需從VS發佈項目,或者如果您的主機支持Azure,則可以發佈它)。

你提到了愛的web堆棧。那麼,SignalR無法在中等信任模式下工作。看到這裏 - 根據大衛Folwer,它不會很快https://github.com/SignalR/SignalR/issues/364

最後,如果你得到錯誤500S隨時添加這Global.asax中

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; 

收到詳細的錯誤。

+0

我沒有做到SignalR,它不包含在我的項目中。它僅在返回JSON(通過jQuery或帶JSON的Fiddler)返回Medium Trust時發生。將嘗試你詳細的錯誤方法,看看我能否獲得更多的細節。 – Sam 2012-07-30 02:20:41

+0

嘗試了您提到的提示,但沒有提供任何其他信息。將VS2010與嵌入式Web服務器一起使用時,WebAPI將引發500內部服務器錯誤,並且響應中沒有包含其他信息(使用Fiddler)。 – Sam 2012-07-30 11:12:17

+0

我試過IIS以確保它不是卡西尼的東西。再次,具有JSON結果的WebAPI在完全信任下工作,但是當我切換到中等信任,500內部服務器錯誤時。在兩種情況下都可以使用XML結果的WebAPI。我無法從應用程序獲得任何額外的錯誤信息(不解僱Application_Error),所以我啓用IIS失敗的請求跟蹤。用這些信息更新了我的問題。 – Sam 2012-07-30 14:25:48