插入记录的ID

时间:2018-05-09 20:50:53

标签: c# asp.net httpresponse

我想知道如何获取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

1 个答案:

答案 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请求。

相关问题