2016-06-29 2 views
1

Я хочу, чтобы добавить местоположение пользователя (My userDto имеет список месте он хочет посетить)Web Api добавить местоположение пользователя

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

это нормально сделать Put? (потому что у меня есть функция, которая просто добавляет местоположение в список в пользователе, а затем я хочу обновить), но как мой маршрут должен выглядеть?

Это нормально [Маршрут ("{id: guid}/location /")] ??

Я передаю userId с сессии, но это нормально, чтобы отправить все место в PUT ??

+0

Я предполагаю, что вы будете называть его вызовом AJAX, не так ли? Имеет ли место идентификатор? Вы можете передать json как {guid: "GUID_GOES_HERE", locationId: "LOCATION_ID"}, а на вашем AddLocationToUser вы должны передать идентификатор местоположения, а не 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, для авиповых соглашений –

ответ

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 lt Web Api routing, URL-адрес «/ api/Location», а PostLocationToUser возвращает код состояния 204 (без содержимого).

Смежные вопросы