我的Get方法应该如何 - MVC 4?

时间:2017-05-25 12:10:24

标签: c# ajax rest asp.net-mvc-4

这是我的API控制器的Get方法

    [HttpGet]
    public MyTable GetMyTable(byte id, string langId)
    {
        MyTable mytable;
        if (id == 0)
        {
            mytable = db.MyTables.Find(langId);
        }
        else
        {
            mytable = db.MyTables.Find(id, langId);
        }

        if (mytable == null)
        {
            throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
        }

        return mytable;
    }

它有两个键,所以是一个复合键。 DbSet.Find()方法要求指定MyTable.ID和MyTable.LanguageId。

此表格的模型如下:

[Table("MyTable", Schema = "MyScheme")]
public class MyTable
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    [Required]
    [Column(Order = 0)]
    public byte ID { get; set; }
    [Required]
    public string MyCode { get; set; }
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    [Required]
    [Column(Order=1)]
    public string LanguageId { get; set; }
    [Required]
    public byte LevelId { get; set; }

    public string ConceptName { get; set; }
}

我希望能够按给定的语言ID列出所有条目,但是没有给出特定的id。 我也希望能够通过id和langId获得单一条目。

我该怎么做?

3 个答案:

答案 0 :(得分:0)

[HttpGet]
public JsonResult GetMyTable(string langId)
{
   var mytable = db.MyTables.Find(langId);
   return Json(mytable);
}

[HttpGet]
public JsonResult GetMyTable(byte id, string langId)
{
    MyTable mytable = db.MyTables.Find(id, langId);
    if (mytable == null)
    {
        return Json(new {Message = "NullreferenceExeption"})
    }
    return Json(mytable);
}

答案 1 :(得分:0)

您有2个查询返回不同的结果集。一个返回一个集合,另一个返回一个结果。我不打算在api控制器中描述一个正确的RESTful响应。那是一个不同的话题。但如果我们看看到目前为止你应该是这样的:

[HttpGet]
public MyTable GetMyTable(byte id, string langId)
{
    List<MyTable> results = new List<MyTable>();
    if (id == 0)
    {
        results = db.MyTables.Where(x => x.LanguageId == langid).ToList();
    }
    else
    {
        var find = db.MyTables.Find(id, langId);
        if (find != null) results.Add(find);
    }
    return results;
}

这样结果总是以列表形式返回,如果find用于唯一条目查找,那么您将获得一个包含单个元素的列表。

答案 2 :(得分:0)

我的工作代码:

    // GET api/MyTable?langid=mk-MK
    [HttpGet]
    public IQueryable<MyTable> GetMyTable(string langid)
    {
        IQueryable<MyTable> mytable = db.MyTables.Where(x => x.LanguageId == langid);
        if (mytable == null)
        {
            throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
        }

        return mytable;
    }

    // GET api/MyTable?id=5&langid=mk-MK
    [HttpGet]
    public MyTable GetMyTable(byte id, string langid)
    {
        MyTable mytable = db.MyTables.Find(id, langid);

        if (mytable == null)
        {
            throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
        }

        return mytable;
    }