2016-06-29 48 views
1

我想要的位置添加到用戶(我userDto有位置的列表,他想要訪問)網絡API添加位置到用戶

[HttpPut] 
     [Route("{id:guid}/location/")] 
     public IHttpActionResult AddLocationToUser(Guid idUser , LocationDto location) 
     { 
      _userLogic.AddLocationToUser(idUser, location); 
      return Ok(); 
     } 

它的確定,使認沽? (因爲我有一個功能,只是添加一個位置到用戶列表中,然後我想更新),但我的路線應該是什麼樣子?

沒關係[Route(「{id:guid}/location /」)] ??

我從會話中傳遞userId,但可以發送PUT中的整個位置嗎?

+0

我想你會從AJAX調用中調用它,對嗎?該地點是否有ID?你可以傳遞一個像{guid:「GUID_GOES_HERE」,locationId:「LOCATION_ID」}的json,並且在你的AddLocationToUser上,你可以傳遞位置ID,而不是DTO –

+0

就我個人而言,我會像'api/api_project /用戶/ GUID/AddLocation/LocationID –

+0

請參考http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions,瞭解api路由約定 –

回答

1

由於是添加/創建記錄,所以您希望使用HttpPost。對於LocationDto,您想使用[FromBody]

例如,

[HttpPost] 
[Route("{id:guid}/location")] 
public IHttpActionResult AddLocationToUser(Guid id, [FromBody] LocationDto location) 
{ 
    _userLogic.AddLocationToUser(id, location); 
    return Ok(); 
} 
0

我第二@使用HttpPost的贏的建議。如果您使用Web Api 2,那麼以下是另一種選擇。

控制器:

public class LocationController : ApiController 
{ 
    UserLogic _userLogic; 
    public LocationController() 
    { 
     _userLogic = new UserLogic(); 
    } 
    public void PostLocationToUser(LocationViewModel locationViewModel) 
    { 
     _userLogic.AddLocationToUser(locationViewModel.UserId, locationViewModel.Location); 
    } 
} 

視圖模型:

public class LocationViewModel 
{ 
    public Guid UserId { get; set; } 
    public Location Location { get; set; } 
} 

public class Location 
{ 
    public string Latitude { get; set; } 
    public string Longitude { get; set; } 
} 

JSON:

var input = { 
    UserId: "11111111-1111-1111-1111-111111111111", 
    Location: { 
     Latitude: "anotherLatitude", 
     Longitude: "anotherLongitude" 
    } 
}; 

我用defau在Web Api路由中,url是「/ api/Location」,PostLocationToUser返回狀態碼204(無內容)。