【问题标题】:How to return JSON in a ASP.NET MVC/web controller?如何在 ASP.NET MVC/Web 控制器中返回 JSON?
【发布时间】:2017-05-18 01:13:56
【问题描述】:

我的问题是我一直在关注 ASP.net MVC/API 教程,我在 MVC 方面有一个工作控制器。例如,这可以正常工作并在视图中返回我的数据:

public class DestinationController : Controller
{
    private ebstestEntities db = new ebstestEntities();

    // GET: Destination
    public async Task<ActionResult> Index()
    {

        return View(await db.CI_DEST_ALL_VARIABLES.ToListAsync());
    }

但是,当我查看以下示例时,我正在处理另一个项目,我似乎无法弄清楚如何更改它以适应我上面的项目控制器。

// GET: Destination
public async Task<ActionResult> IndexVM()
{
    var model = new BeerIndexVM;

    using (var db = new AngularDemoContext())
    {
        model.Beers = db.Beers.ToList();
    }
    return Json(model, JsonRequestBehavior.AllowGet);
}

【问题讨论】:

  • "我似乎不知道如何更改它以适应我上面的项目控制器。"如果您不描述问题,我们无能为力。
  • 此外,Asp.Net MVC 与 Web API 不同且独立。它不是“ASP.Net MVC Web API”。我在问题中没有看到任何与 Web API 相关的代码。
  • 我会删除最后一句话。要求场外资源是结束您的问题的理由
  • 因此,在您的 DestinationController 中,您将返回 View,而在第二个示例中,您将返回 Json。当您尝试返回 Json 而不是视图时会发生什么?
  • 写一个总结问题的标题,how to ask question

标签: c# asp.net json asp.net-mvc


【解决方案1】:

因为你的方法签名是async Task&lt;ActionResult&gt;,你需要await一个方法调用。 ToList() 的异步版本是 ToListAsync()。因此,您只需使用前面的await 调用该方法,即可得到await db.Beers.ToListAsync()。将该变量分配给您的模型,您应该是金牌。

完整方法:

// GET: Destination
[HttpGet]
public async Task<ActionResult> IndexVM()
{
    var model = new BeerIndexVM();

    using (var db = new AngularDemoContext())
    {
        model.Beers = await db.Beers.ToListAsync();
    }
    return Json(model, JsonRequestBehavior.AllowGet);
}

我还会在方法上添加一个 http 动词属性,尽管在这个特定的实例中它不是必需的。

【讨论】:

    【解决方案2】:

    似乎缺少的一件事是您的“AcceptVerbs”注释。

    [AcceptVerbs(HttpVerbs.Get)]
    public async Task<ActionResult> MethodName()
    {
        return json(model, JSonRequestBehavior.AllowGet);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      相关资源
      最近更新 更多