2012-07-29 66 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