ASP.NET MVC 4 API的端点不响应

时间:2019-02-22 15:16:30

标签: c# asp.net-mvc-4 entity-framework-6

我是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();
}

我简直不明白为什么这不起作用。

一些帮助将不胜感激。

谢谢!

4 个答案:

答案 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;,这将避免在视图循环时延迟执行加载数据(如果您正在视图中使用该模型。