C# Web Api向用户添加位置

C# Web Api向用户添加位置,c#,asp.net,asp.net-mvc,rest,asp.net-web-api,C#,Asp.net,Asp.net Mvc,Rest,Asp.net Web Api,我想向用户添加一个位置(My userDto有一个他想访问的位置列表) 可以投一票吗?(因为我有一个功能,只需在用户列表中添加一个位置,然后我就想进行更新)但我的路线应该是什么样的 它可以[路由(“{id:guid}/location/”)吗 我从会话中传递用户ID,但可以将整个位置发送到PUT 由于它正在添加/创建记录,您需要使用HttpPost。对于LocationDto,您需要使用[FromBody] 比如说, [HttpPost] [Route("{id:guid}/location")

我想向用户添加一个位置(My userDto有一个他想访问的位置列表)

可以投一票吗?(因为我有一个功能,只需在用户列表中添加一个位置,然后我就想进行更新)但我的路线应该是什么样的

它可以[路由(“{id:guid}/location/”)吗


我从会话中传递用户ID,但可以将整个位置发送到PUT

由于它正在添加/创建记录,您需要使用HttpPost。对于LocationDto,您需要使用[FromBody]

比如说,

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

我支持@Win使用HttpPost的建议。如果您使用的是WebAPI2,那么下面是另一种选择

控制器:

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; }
}
var input = {
    UserId: "11111111-1111-1111-1111-111111111111",
    Location: {
        Latitude: "anotherLatitude",
        Longitude: "anotherLongitude"
    }
};
查看模型:

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; }
}
var input = {
    UserId: "11111111-1111-1111-1111-111111111111",
    Location: {
        Latitude: "anotherLatitude",
        Longitude: "anotherLongitude"
    }
};
JSON:

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; }
}
var input = {
    UserId: "11111111-1111-1111-1111-111111111111",
    Location: {
        Latitude: "anotherLatitude",
        Longitude: "anotherLongitude"
    }
};

我使用了默认的Web Api路由,url是“/Api/Location”,PostLocationToUser返回的状态代码是204(无内容)。

我假设您将通过AJAX调用调用它,对吗?该位置是否有ID?您可以传递一个json,比如{guid:“guid_GOES_HERE”,locationId:“LOCATION_ID”},在AddLocationToUser上,您传递的是位置ID,而不是数据。对于api路由约定,我的路由方式是:'api/api_project/Users/guid/AddLocation/locationidpreferto'