【问题标题】:Aspnet mvc4 webapi cause workerprocess crashAsp Net mvc 4 webapi导致工作进程崩溃
【发布时间】:2012-05-01 20:43:47
【问题描述】:

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

你必须写一个属性 'type' = 'object' 在用本地名称'__type'写属性。

堆栈是:

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 序列化没有任何问题

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

【问题讨论】:

    标签: c# asp.net-mvc-4 asp.net-web-api


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢布兰登的回复。该模型在erpstore.codeplex.com/SourceControl/changeset/view/… 可见,我不使用EntityFramework。
    • 您能否发布一个中断的 API 控制器操作示例?是否只是调用使站点中断的一项操作?无论您以 XML 还是 JSON 格式请求它都会中断吗?
    • 不是不系统异常,调用者:var client = new HttpClient(); T 结果 = 默认值(T); client.GetAsync(requestUri).ContinueWith((task) => { HttpResponseMessage response = task.Result; if (response.StatusCode == System.Net.HttpStatusCode.OK) { response.Content.ReadAsAsync().ContinueWith ((readTask) => { result = readTask.Result; }).Wait(); } else { throw new Exception(response.ReasonPhrase); } }).Wait(); WebApiController 在这里:erpstore.codeplex.com/SourceControl/changeset/view/…
    猜你喜欢
    • 2014-12-30
    • 1970-01-01
    • 2021-07-24
    • 2012-06-02
    • 2021-10-29
    • 2021-03-28
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    相关资源
    最近更新 更多