【问题标题】:POST request with Json body to MVC resful service将带有 Json 主体的 POST 请求发送到 MVC RESTful 服务
【发布时间】:2014-01-15 12:04:45
【问题描述】:

试图构造对 wcf RESTful 服务的有效请求。但是整个小时都做不到,我不明白为什么它不起作用。返回 JSON 的其他 API 可以正常工作,我对其进行了测试。现在需要修复请求 API。

我在 AddMeal 方法的实现中设置了断点,但她没有触发。我认为我的请求或属性有问题

    //Add Meal
    [OperationContract]
    [WebInvoke(UriTemplate = "AddMeal",
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json, Method = "POST")]
    bool AddMeal(string meal);

【问题讨论】:

  • 你得到什么错误?附加调试器以查找,或打开“应用程序”事件日志。

标签: c# asp.net-mvc json wcf rest


【解决方案1】:

您的 WCF 方法需要 string,但是,模型绑定器会尝试将您的 JSON 绑定到一个不起作用的字符串。使用 MVC 时,您应该改用模型,创建一个表示您的 JSON 数据的模型,例如

public class Meal
{
    public DateTime EatedTime { get; set; }
    public decimal Amount { get; set; }
    public int PatientID { get; set; }
    public int MealTypeID { get; set; }
    ...
}

然后更新您的签名以期望该模型

bool AddMeal(Meal meal)

您应该会发现数据已绑定到 meal 模型。

【讨论】:

  • 谢谢!它有帮助!我决定使用 NotMapped 属性通过我的模型将字符串转换为 DateTime。还有一个问题,需要将 [DataContract] 和 [DataMember] 应用于我的模型吗?我认为它仍然有效
  • @Ark 否,默认模型绑定器应处理反序列化。但是,由于它是 WCF,如果您要返回模型,即 Meal GetMeal(...),则可能需要这样做。
  • 我的意思是我想使用相同的模型通过 EF 与数据库交互,并将此模型用于 WCF 服务:绑定、验证等
  • @Ark 再次,就像我说的那样,只有当您打算从 WCF 返回该模型时。这些属性由DataContractSerializer 使用,并将用于序列化要通过网络发送的模型。
  • 你知道如何用 null 键确定 MealType 并强制 WCF 将其成功绑定到我的模型
猜你喜欢
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
  • 1970-01-01
  • 2015-08-05
  • 2017-02-14
相关资源
最近更新 更多