Web API赢得';t使用存储过程返回JSON

本文关键字:存储过程 返回 JSON API 赢得 Web | 更新日期: 2023-09-27 18:27:05

我是编写WEB API(使用VS 2013)的新手,我曾尝试过使用存储过程以JSON形式返回结果。我已经找到了使用HTML进行显示的例子,但我无法让它发送JSON。我正在处理这个例子,我看到的错误是"名称'view'在当前上下文中不存在"。我通常使用留言板很好地解决问题(我觉得我很接近),但我似乎无法成功。存储过程中有数据,但我不知道如何返回。这是我的第一篇文章,所以如果答案很明显,请原谅我。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using TRYiT.Models;
namespace TRYiT.Controllers
{
    public class TRYiTController : ApiController
    {
        TRYiTEntities _db = new TRYiTEntities();
        public IEnumerable<InfoModel> Get()
        {
            var studentercord = _db.Student_sp().ToList();
            InfoModel objmodel = new InfoModel();
            objmodel.infoData = new List<info>();
            foreach (var item in studentercord.ToList())
            {
                objmodel.infoData.Add(new info { StudentID = item.StudentID, 
                                                 LastName = item.LastName, 
                                                 FirstName = item.FirstName, 
                                                 EnrollmentDate = item.EnrollmentDate, 
                                                 MiddleName = item.MiddleName });
            }
            return view(objmodel);
        }
    }
}

Web API赢得';t使用存储过程返回JSON

我希望,您正在寻找这个。

public IEnumerable<info> Get()
{
    var studentercord = _db.Student_sp().ToList();
    IEnumerable<info> data = (from item in studentercord
                                select new info
                                {
                                    StudentID = item.StudentID,
                                    LastName = item.LastName,
                                    FirstName = item.FirstName,
                                    EnrollmentDate = item.EnrollmentDate,
                                    MiddleName = item.MiddleName
                                }).ToList();
    return data;
}

注意:我已经将返回类型更改为info,因为我看不到IEnumerable<InfoModel>不能从这里返回,而是使用IEnumerable<info>是有意义的。所以,如果你觉得这是正确的,那就去做改变吧。

因为,正如您所看到的,返回类型是IEnumerable<T>,所以您不必返回View。在webapi中,您需要返回IEnumerable,这样当您执行Get请求时,您将获得数据列表(对于本例)。但对于MVC,在调用controller时必须返回View,而WebApi的返回类型则不是这样。

因此,假设这是托管在"http://www.example.com并且路由定义为"api/{controller}",您需要点击"http://www.example.com/api/TRYiT"才能获得数据列表。

我宁愿做一些类似的事情

public HttpResponseMessage Get()
{
    var studentercord = _db.Student_sp().ToList();
    InfoModel objmodel = new InfoModel();
    objmodel.infoData = new List<info>();
    foreach (var item in studentercord.ToList())
    {
        objmodel.infoData.Add(new info { StudentID = item.StudentID, 
                                         LastName = item.LastName, 
                                         FirstName = item.FirstName, 
                                         EnrollmentDate = item.EnrollmentDate, 
                                         MiddleName = item.MiddleName });
    }
    return Request.CreateResponse(HttpStatusCode.OK, objmodel.infoData);
    //or return Request.CreateResponse(HttpStatusCode.OK, objmodel);
    //depending what your client expects...
}