如何获取具有一对多关系的 Web API

How to get Web API with one to many relationship

我有 3 个实体。实体传感器、实体 tanaman 和实体 tanamanhassensor。 我想从 api tanamanhassensor 使用 json jquery 制作图表。如何显示图形?如果我使用我的 json,api http://xxxxx/api/tanaman_has_sensor 找不到

我的实体是这样的:

public partial class Tanaman_has_Sensor
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Tanaman_has_Sensor()
    {
        this.Tanaman_has_Sensor_has_Jadwal = new HashSet<Tanaman_has_Sensor_has_Jadwal>();
    }

    public int Tanaman_IdTanaman { get; set; }
    public int Sensor_IdSensor { get; set; }
    public double NilaiSensor { get; set; }
    public System.DateTime WaktuSensor { get; set; }
    public string Lokasi { get; set; }

    public virtual Sensor Sensor { get; set; }
    public virtual Tanaman Tanaman { get; set; }
    public virtual ICollection<Tanaman_has_Sensor_has_Jadwal> Tanaman_has_Sensor_has_Jadwal { get; set; }
}

这是我的控制器

 public class TanamanhasSensorController : ApiController
{
    private SmartGreenHouseEntities db = new SmartGreenHouseEntities();

    // GET: api/TanamanhasSensor
    public IQueryable<Tanaman_has_Sensor> GetTanaman_has_Sensor()
    {
        return db.Tanaman_has_Sensor;
    }

    // GET: api/TanamanhasSensor/5
    [ResponseType(typeof(Tanaman_has_Sensor))]
    public async Task<IHttpActionResult> GetTanaman_has_Sensor(int id)
    {
        Tanaman_has_Sensor tanaman_has_Sensor = await db.Tanaman_has_Sensor.FindAsync(id);
        if (tanaman_has_Sensor == null)
        {
            return NotFound();
        }

        return Ok(tanaman_has_Sensor);
    }
}

申请json

[{
"Tanaman_IdTanaman": 1,
"Sensor_IdSensor": 2,
"NilaiSensor": 3.1,
"WaktuSensor": "2016-11-19T07:38:42.519263+07:00",
"Lokasi": "sample string 5",
"Sensor": {
  "$id": "1",
  "IDSensor": 1,
  "NamaSensor": "sample string 2",
  "Tanaman_has_Sensor": [
    {
      "Tanaman_IdTanaman": 1,
      "Sensor_IdSensor": 2,
      "NilaiSensor": 3.1,
      "WaktuSensor": "2016-11-19T07:38:42.519263+07:00",
      "Lokasi": "sample string 5",
      "Sensor": {
        "$ref": "1"
      }]

我的json

 $.ajax({
            type: 'GET',
            url: "http://xxxxx/api/tanaman_has_sensor",
            dataType: 'json',
            async: false,
            contentType: "application/json; charset=utf-8",
            data: dd,

假设 Web 的默认基于约定的路由 API 2

// Convention-based routing.
config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

你应该打电话给

url: "http://xxxxx/api/TanamanhasSensor

按照约定,路由 table 匹配控制器名称减去 Convention

因此 TanamanhasSensorController 将映射到 TanamanhasSensor

甚至你的控制器也在评论中展示了这一点

public class TanamanhasSensorController : ApiController {
    private SmartGreenHouseEntities db = new SmartGreenHouseEntities();

    // GET: api/TanamanhasSensor
    [HttpGet]
    public IQueryable<Tanaman_has_Sensor> GetTanaman_has_Sensor() {
        return db.Tanaman_has_Sensor;
    }

    // GET: api/TanamanhasSensor/5
    [HttpGet]
    [ResponseType(typeof(Tanaman_has_Sensor))]
    public async Task<IHttpActionResult> GetTanaman_has_Sensor(int id) {
        Tanaman_has_Sensor tanaman_has_Sensor = await db.Tanaman_has_Sensor.FindAsync(id);
        if (tanaman_has_Sensor == null) {
            return NotFound();
        }

        return Ok(tanaman_has_Sensor);
    }
}