【问题标题】:WebApi return custom ServiceResultWebApi 返回自定义 ServiceResult
【发布时间】:2015-03-30 00:53:50
【问题描述】:

我有普通的 WebApi 控制器,带有方法:

public class ModelController : ApiController
{
    public IEnumerable<Model> Get()
    {
        return service.Get();
    }

    public string Get(int id)
    {
        return service.Get(id);
    }

    public void Post([FromBody]MyViewModel value)
    {
        return service.Save(value);
    }

    public void Put(int id, [FromBody]MyViewModel value)
    {
        return service.Save(value);
    }

    public void Delete(int id)
    {
        return service.Delete(value);
    }
}

我想将返回结果包装到自定义对象 ServiceResult 中

public class ServiceResult<T>
{
    public bool IsError{ get; set; }
    public T ObjectModel {get; set}
}

我想将所有控制器方法的返回类型更改为 ServiceResult 这是一个例子:

public ServiceResult Post([FromBody]MyViewModel value)
{
    service.Save(value);
    //getting error here:
    return new ServiceResult() { IsError= true, ObjectModel = value };
}

但得到错误

“ObjectContent`1”类型未能序列化响应正文 内容类型'应用程序/xml; charset=utf-8'。

键入“Models.View.MyViewModel” 数据合同名称 'MyViewModel://schemas.datacontract.org/2004/07/MyViewModel' 预计不会。考虑使用 DataContractResolver 或添加任何 已知类型列表中静态未知的类型 - 例如, 通过使用 KnownTypeAttribute 属性或将它们添加到 传递给 DataContractSerializer 的已知类型列表。

你知道我该如何解决这个问题吗?

【问题讨论】:

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


    【解决方案1】:

    你的 ServiceResult 对象需要一个类型参数,试试这个

    return new ServiceResult<MyViewModel>() { IsError= true, ObjectModel = value };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多