2013-03-04 54 views
0

我有一些問題,我的分析模型在ASP.NET MVC API不解析

ASP.NET MVC API模型這是我的API控制器:

public class UserController : ApiController 
{ 
    // Hent liste af personer 
    public IEnumerable<UserModel> Get() 
    { 
     return new UserModel[] { new UserModel(), new UserModel() }; 
    } 

    // Hente enkelt person 
    public UserModel Get(int id) 
    { 
     return new UserModel(); 
    } 

    // Opret person 
    [ValidationActionFilter] 
    public CreateUserRespose Post([FromBody]UserModel model) 
    { 
     CreateUserRespose rs = new CreateUserRespose(); 
     return rs; 
    } 

    // Rediger person 
    public UserModel Put(int id, [FromBody]UserModel model) 
    { 
     return new UserModel(); 
    } 

    // Slet person 
    public UserModel Delete(int id) 
    { 
     return new UserModel(); 
    } 
} 

}

而且的usermodel :

public class UserModel 
{ 
    [Required] 
    [StringLength(500)] 
    public String FristName { get; set; } 
    [Required] 
    [StringLength(500)] 
    public String LastName { get; set; } 
    [Required] 
    [StringLength(250)] 
    public String Email { get; set; } 
    [Required] 
    public String MatrikelId { get; set; } 
} 

當我通過Fiddler調用Post命令時,以下主體

FirstName=Fistname MiddleName&LastName=SomeName&[email protected]&MatrikelId=1234 

動作Post是否會被調用,但模型爲null,ModelState.IsValid爲true,如果我不向body發送數據,也會發生同樣的情況! 我在這裏做錯了什麼?

更新: 我已經tryed發送數據,而不是JSON小提琴手 :

User-Agent: Fiddler 
Host: localhost:51268 
Content-Length: 102 
Content-type: application/json 

{"FristName":"Kasper asdasd","LastName":"asdasdasd","Email":"[email protected]","MatrikelId":"132456asd"} 

但要當模特是空模型的狀態不會失效?

+0

請求中的Content-Type頭部值是什麼? – tpeczek 2013-03-04 10:16:34

+0

我還沒有設置一個在提琴手的headders是以下「用戶代理:提琴手 主機:本地主機:51268 內容長度:79」 – Androme 2013-03-04 10:24:47

+0

嘗試刪除'[FromBody]'infront的參數 – Aviatrix 2013-03-04 10:27:13

回答

2

ASP.NET Web API正在使用內容談判進程以決定使用哪個MediaTypeFormatter來反序列化請求的正文。對於典型的POST請求,它將檢查AcceptContent-Type標題。如果不存在,它將使用列表上的第一個MediaTypeFormatter(默認爲JsonMediaTypeFormatter)。

在你的情況下,Web API無法確定正確的MediaTypeFormatter。將Content-Type標頭添加到請求的值application/x-www-form-urlencoded應該可以解決問題。

如果你想獲得關於格式化程序更詳細的瞭解,模型的ASP.NET Web API綁定內容協商我建議如下閱讀: