微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

您能否从 Web API POST 中读取不在数据模型中的其他数据字符串?

如何解决您能否从 Web API POST 中读取不在数据模型中的其他数据字符串?

在实体框架中,我有一个 DBGeography 对象:

using System.Data.Entity.Spatial;
...
public DbGeography Location { get; set; }

由于我还没有发现通过 JSON 发送 POINT 对象的更好方法,我打算从我的 Javascript 代码中发送 'lat' 和 'lng' 字符串值,并在服务器上使用它们POST 方法

Screenshot from POSTMan REST client

public async Task<IHttpActionResult> PostI4Item(myEntity item)
        {
          var lat = (VALUE TO BE SOURCED);
          var lng = (VALUE TO BE SOURCED);
          string Point = String.Format("POINT({0} {1})",lat,lng);
          item.Location = DbGeography.PointFromText(Point,4326);
          myEntity current = await InsertAsync(item);
          return CreatedAtRoute("Tables",new { id = current.Id },current);
        }

问题是我不知道如何检索发送到 POST 的值,而这些值在数据模型中是不需要的。 item.Location 是可访问的,因为它已被声明。但是,即使我在“lat”和“lng”的正文中发送了额外的键/值对,我怎样才能在代码中发现这些值?我不能使用 item.latitem.lng,因为它们没有被声明,而且我不希望这些值有额外的 DB 列......我只希望它们被接受为输入,但不保存。

数据模型中是否有一种方法可以声明一个值(可能是只读的或内部的),该值在请求中是预期的并且可在 POST 方法中使用,但实际上并未保存到我的数据库中?

解决方法

Mohamed Badr & Niels R 的这篇文章 https://stackoverflow.com/a/35982194/3026149 和 haim770 的这篇文章 https://stackoverflow.com/a/18215561/3026149 解决了我的问题。

我不知道有一个 [NotMapped] 属性可用于我的数据模型,这意味着我可以期待 lat 和 lng 的值,而无需让它们在实体框架中创建数据库列。

所以我的班级变成了:

using System.Data.Entity.Spatial;
using System.ComponentModel.DataAnnotations.Schema;
...
public DbGeography Location { get; set; }
[NotMapped]
public double lng { get; set; }
[NotMapped]
public double lat { get; set; }

我的代码变成:

public async Task<IHttpActionResult> PostI4Item(myEntity item)
        {
          var Point = DbGeography.FromText($"POINT({item.lng} {item.lat})");
          item.Location = Point;
          myEntity current = await InsertAsync(item);
          return CreatedAtRoute("Tables",new { id = current.Id },current);
        }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。