我想知道如何获取http响应中返回的插入记录的id到POST方法
控制器方法:
public HttpResponseMessage POST([FromBody]Map newmap)
{
try
{
using (SHATDbEntities entities = new SHATDbEntities())
{
entities.Maps.Add(newmap);
entities.SaveChanges();
var message = Request.CreateResponse(HttpStatusCode.Created, newmap);
message.Headers.Location = new Uri(Request.RequestUri + newmap.Id.ToString());
return message;
}
}
catch (Exception ex)
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);
}
}
回应处理:
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:2351/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = client.PostAsJsonAsync(RequestURI, newmap).Result;
int mapid = int.Parse(responsestatusCode.Content.ReadAsStringAsync().Result)
解释:
我尝试了其他可用于堆栈溢出的解决方案,但没有得到解决方案和上面的代码,但它通过例外here
答案 0 :(得分:0)
如果使用Entity Framework并在表上将Identity列设置为主键:
取自此SO:How can I get Id of inserted entity in Entity framework?
当使用自动生成的ID时,默认情况下,每个INSERT都使用SELECT SCOPE_IDENTITY()跟随实体框架。
所以在你的.SaveChanges()调用之后,检查你的newMap对象是否填充了Id值。
如果不使用Entity Framework,则有两种解决方案:How to get last inserted id?
一个是使用OUT参数,另一个是SCOPE_IDENTITY。两者都需要更改为SaveChanges()方法生成的底层sql。
您的response.Content应该只是您的newMap对象的JSON表示。将其反序列化回Map,您可以这样访问它。
JSON反序列化应该简单:
var deserializedMap =
JsonConvert.DeserializeObject<Map>(response.Content);
您也可以尝试:
var deserializedMap = JsonConvert.DeserializeObject<Map>(await response.Content.ReadAsJSonAsync());
因为您正在执行异步http请求。