0

我在 asp.net mvc4 站点上的 WebAPI 有问题,错误消息是:

在使用本地名称“__type”编写属性之后,您必须编写一个属性“type”=“object”。

堆栈是:

at System.Web.Http.WebHost.HttpControllerHandler.EndProcessRequest(IAsyncResult result)
at System.Web.Http.WebHost.HttpControllerHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

我的方法返回一个对象列表 IEnumerable ,产品是 datacontract 可序列化没有任何问题

我通过全局错误处理程序恢复了这个错误,当它发生时应用程序被回收。

4

1 回答 1

0

您是否尝试过这里的任何建议?它们似乎都与序列化有关(不使用virtual关键字,指定已知类型等)。

实际上,我建议不要做帖子中人们所描述的事情,即直接从他们的数据库上下文中使用实体,而不是将它们变成某种响应模型,原因如下:

  • 如果您的实体发生变化,您可能违反了与您的 WebAPI 的任何消费者的合同
  • 如果您想在来自上下文后转换任何值,则必须在控制器中进行,这很糟糕,因为 i* t 为控制器提供了映射和转换的额外责任*(AutoMapper最适合这个)
  • 作为前两点的一种组合,您将持久性模型关注点与“视图”(或在本例中为合同)关注点耦合在一起(即,您不能随意更改实体而不担心合同,反之亦然)

不确定您是否在没有看到更多代码的情况下做任何这些事情,但它可能有助于使您尝试在 ApiController 中使用的模型尽可能为POCO -y。

于 2012-05-02T18:48:42.520 回答