2016-10-27 8 views
0

Web API経由でコントローラにリストを送信しようとしています。私はPostman経由でJSONとして送信しています。私はJSONが正しくフォーマットされていることを100%確信しています。それでも、usersListnullとなります。私も[FromBody]属性なしで試しました。Web APIがPUTで本体を読み取っていません

コントローラ名はUserControllerです。したがって、URLはapi/user/です。使用される方法はPutです。

public IHttpActionResult Put([FromBody]List<UserVm> usersList) 
{ 
    if (usersList.Count > 0) 
    { 
     _userService.UpdateUserRoles(usersList); 
     return Ok(); 
    } 
    return BadRequest(); 
} 

public class UserVm 
{ 
    public int Id { get; set; } 
    public string UserName { get; set; } 
    public string Name { get; set; } 
    public string Token { get; set; } 
    public string Icao { get; set; } 
    public string RefreshToken { get; set; }  
    public int ExpiresIn { get; set; } 
    public List<Role> Roles { get; set; } 
} 

[ 
    { 
     "id": 0, 
     "username": "banji", 
     "name": "baji", 
     "token": "bajz", 
     "icao": "poffe", 
     "refreshtoken": "konna", 
     "expiresin": 0, 
     "roles": [{ 
      "id": 0, 
      "department": "asd", 
      "isadmin": false 
     }] 
    }, 
    { 
     "id": 0, 
     "username": "banji", 
     "name": "baji", 
     "token": "bajz", 
     "icao": "poffe", 
     "refreshtoken": "konna", 
     "expiresin": 0, 
     "roles": [{ 
      "id": 0, 
      "department": "asd", 
      "isadmin": false 
     }] 
    } 
] 

私が間違っていることに関する提案は非常に高く評価されています。

+0

UserVmクラスコードを貼り付けることができますか?また、これが助けになるかどうか確認してください:http://www.c-sharpcorner.com/UploadFile/dacca2/web-api-with-ajax-make-put-request-in-restful-web-api-servi/ – owczarek

+0

私jsonも追加します。 – fjompen

+0

json変数名に大文字を使用して、C#クラスと一致するようにしてください。 –

答えて

0

私の問題を解決しました。パラメータのないコンストラクタを持つことを忘れていました..

3

投稿した内容をコピーして試しました。それはうまく動作します。

enter image description here

とコード:

public class UserVm 
{ 
    public int Id { get; set; } 
    public string UserName { get; set; } 
    public string Name { get; set; } 
    public string Token { get; set; } 
    public string Icao { get; set; } 
    public string RefreshToken { get; set; } 
    public int ExpiresIn { get; set; } 
    public List<Role> Roles { get; set; } 
} 

public class Role 
{ 
    public int Id { get; set; } 
    public string Department { get; set; } 
    public bool IsAdmin { get; set; } 
} 

public class UserController : ApiController 
{ 
    public IHttpActionResult Put([FromBody]List<UserVm> usersList) 
    { 
     if (usersList.Count > 0) 
     { 
      //_userService.UpdateUserRoles(usersList); 
      return Ok(); 
     } 
     return BadRequest(); 
    } 
} 

郵便配達データが同じに見えるあなたも投稿:

enter image description here

をデフォルトのAPIのルートを持っていますか?同様に:

config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

PS:それはあなたが置く使用する場合/リソース/ IDを使用するように素敵な習慣です。与えられたIDでリソースを変更しようとしている、またはそのIDを持つリソースを作成しようとしているということです。動詞PUTは等冪であるため、常に同じ戻り値を持つはずです。それは、リソースを作成することとは別の理由で、更新を行うために使用される理由です。