我是ASP.NET MVC4的新手,但是有一个我无法解决的问题。
我有一个简单的GET端点,我想返回所有prestations
。
当我尝试到达此端点时,我没有响应,甚至没有超时。我的API在其他端点上运行良好。
以下是与此端点相关的方法中的代码:
[Route("api/Prestations")]
// GET: api/Prestations
/// <summary>
/// Liste de toutes les prestations
/// </summary>
/// <returns></returns>
[ResponseType(typeof(List<Prestation>))]
public List<Prestation> GetPrestations()
{
return db.Prestations.ToList();
}
我简直不明白为什么这不起作用。
一些帮助将不胜感激。
谢谢!
答案 0 :(得分:2)
According to this article Handling Larger JSON String Values in .NET and Avoiding Exceptions中的Firebase下载URL,您可以尝试通过更改web.config来增加返回的JSON字符串的大小:
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="86753090" />
</webServices>
</scripting>
</system.web.extensions>
</configuration>
此外,您可以尝试使用Newtonsoft.Json序列化结果,并作为内容返回以查看其是否有效。
[ResponseType(typeof(List<Prestation>))]
public ActionResult GetPrestations()
{
var presentations = db.Prestations.ToList();
return Content(JsonConvert.Seriazlize(presentations), "application/json");
}
但是一般来说,您不希望将整个表中的数据返回给客户端,因为它可能非常庞大并且包含数百万条记录。因此,您宁愿实现分页:
[ResponseType(typeof(List<Prestation>))]
public List<Prestation> GetPrestations(int skip = 0, int take = 100)
{
return db.Prestations.OrderBy(p => p.IdPrestation).Skip(skip).Take(take).ToList();
}
答案 1 :(得分:0)
我终于解决了这个问题,我不得不创建一个ViewModel来返回列表,并只放置prestations和ID的名称。
这是我新创建的课程:
public class PrestationResultNormal
{
public List<ItemPrestation> prestations;
public PrestationResultNormal(List<Prestation> prestations)
{
this.prestations = prestations.Select(x => new ItemPrestation()
{
IdPrestation = x.IdPrestation,
NomPrestation = x.NomPrestation
}).ToList();
}
}
感谢您的帮助! :)
现在在我的方法中,我这样做:
var prestations = db.Prestations.ToList();
return new PrestationResultNormal(prestations);
答案 2 :(得分:0)
我认为这应该可行:
[System.Web.Http.HttpGet]
[System.Web.Http.ActionName(nameof(GetPrestations))]
public HttpResponseMessage GetPrestations()
{
// var result db.Prestations.ToList();
var result = new List<Prestations>()
{
new Prestations(){
IdPrestation = 3,
NomPrestation = "blah1"
},
new Prestations(){
IdPrestation = 4,
NomPrestation = "blah2"
}
};
return Request.CreateResponse(HttpStatusCode.OK, result);
}
public class Prestations
{
public int IdPrestation { get; set; }
public string NomPrestation { get; set; }
}
如果上面的代码对您有用,请尝试取消注释var result db.Prestations.ToList();
并使用它。这两件事都应该起作用。
答案 3 :(得分:0)
如果数据量巨大并且加载导致无法正常工作,请从返回.ToList()
中将db.Prestations.ToList();
删除为返回db.Prestations;
,这将避免在视图循环时延迟执行加载数据(如果您正在视图中使用该模型。