这是我的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获得单一条目。
我该怎么做?
答案 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;
}