Asp.net-Mvc-4

ASP.Net Web Api 未在 POST 上綁定模型

  • December 15, 2015

我正在嘗試將 JSON 數據發佈到 Web Api 方法,但 JSON 數據未綁定到模型。

這是我的模型:

[DataContract]
public class RegisterDataModel
{
   [DataMember(IsRequired = true)]
   public String SiteKey { get; set; }

   [DataMember(IsRequired = true)]
   public String UserId { get; set; }

   [DataMember(IsRequired = true)]
   public String UserName { get; set; }
}

這是我的 Web Api 操作:

   public class RegisterController : ApiController
   {
   public Guid Post([ModelBinder] RegisterDataModel registerDataModel)
   {
       if (!ModelState.IsValid)
       {
           throw new ModelStateApiException(ModelState);
       }
       var userProfileDataContract = userProfileBusinessLibrary.GetNewOne();
       userProfileDataContract.UserId = registerDataModel.UserId;
       userProfileDataContract.UserName = registerDataModel.UserName;

       var userKey = userProfileBusinessLibrary.Register(registerDataModel.SiteKey, userProfileDataContract);

       return userKey;
   }
   }

在我添加之前

$$ ModelBinder $$, registerDataModel 為空。添加後$$ ModelBinder $$, registerDataModel 是一個 RegisterDataModel 實例,但所有的屬性值都是空的。 這是我通過 Fiddler 提出的請求:

http://local.testwebsite.com/api/register

Request Headers:
User-Agent: Fiddler
Host: local.testwebsite.com
Content-Length: 89
Content-Type: application/json; charset=utf-8:

Request Body:
{ 
"SiteKey":"qwerty",
"UserId": "12345qwerty", 
"UserName":"john q"
}    

我缺少什麼讓我的文章數據綁定到 RegisterDataModel 屬性?謝謝你的幫助。

您如何創建 JSON 請求?通過 Fiddler 請求生成器?在請求正文中嘗試以下操作。

{ 
"SiteKey":"qwerty",
"UserId": "12345qwerty", 
"UserName":"john q"
}

我猜“請求正文:”也是您的請求正文的一部分。刪除它並檢查。

與 OP 的問題無關,但是當我在 Model 類中使用(公共)欄位而不是屬性 (即 no {get; set;})時,問題的標題將我帶到了這裡。事實證明,這也會導致綁定失敗。

也許可以幫助某人。

引用自:https://stackoverflow.com/questions/12761602