Web API不会使用存储过程返回JSON

时间:2014-10-17 17:17:22

标签: c# json asp.net-web-api

我是编写WEB API的新手(使用VS 2013),我试图获得一个存储过程来返回JSON中的结果。我找到了使用HTML进行显示的示例,但我无法通过它发送JSON。我正在使用该示例,我看到的错误是“名称'视图'在当前上下文中不存在”。我通常使用留言板很好地处理问题(我觉得我很接近),但我似乎无法让这成功。数据来自sproc,但我不知道如何返回它。这是我的第一篇文章,如果答案显而易见,请原谅我。

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);
        }

    }
}

2 个答案:

答案 0 :(得分:2)

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

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>无法从此处返回,而是使用{{1} }。因此,如果您觉得它是正确的,请继续进行更改。

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

所以假设,这是托管在&#34; http://www.example.com&#34;并且路由定义为&#34; api / {controller}&#34;,您需要点击WebApi以获取数据列表。

答案 1 :(得分:0)

我宁愿做类似

的事情
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...
}