【问题标题】:How to create a json in API?如何在 API 中创建 json?
【发布时间】:2021-05-10 02:10:01
【问题描述】:

我的第一个 API 和我的第一个 JSON

我想转换 SQL 查询的结果

我想将结果放在 JSON 中,这样当用户调用 API 时,他们会得到一个 JSON 文本来使用。

我发现这个问题在这里有帮助

How to use SqlCommand and SqlDataReader to return a Json result in C#

但是当我尝试在我的代码中应用相同的时候

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Data;
using System.Data.SqlClient;
using System.Web.Mvc;

namespace CDAPIs.Controllers
{
    public class RepsSelect : ApiController
    {
        string gDBConn = "Data Source=Server;Database=DB1;User Id=user;Password=*******;";

        [Route("api/RepsSelect/{RepID}/{Tag}")]
        public string Get(string RepID, string Tag)
        {
            SqlConnection conn = new SqlConnection(gDBConn);
            SqlCommand cmd = new SqlCommand("RepsSelect", conn);
            cmd.CommandTimeout = 0;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add(new SqlParameter("@RepID", RepID));
            cmd.Parameters.Add(new SqlParameter("@Tag", ""));

            try
            {
                conn.Open();

                SqlDataReader rdr = cmd.ExecuteReader();

                var dt = new DataTable();
                dt.Load(rdr);
                List<DataRow> result = dt.AsEnumerable().ToList();
                rdr.Close();

                // Error is here
                return Json(result, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                var error = ex.Message;
                return View(error);
            }
        }
    }
}

我收到这些错误

CS1503:参数 2:无法从“System.Web.Mvc.JsonRequestBehavior”转换为“Newtonsoft.Json.JsonSerializedSettings”

我尝试使用 Newtonsoft.Json 而不是 System.Web.Mvc,但出现此错误

【问题讨论】:

  • 切勿将错误消息粘贴为图像。如果你修复它,我会撤销投票。
  • @JeremyThompson 错误信息本身已经在图片上方!!
  • 第二张图就是我说的

标签: c# json api


【解决方案1】:

使用 API 时 - 我们希望使用 http 响应协议(最佳实践)。

尝试更改此设置

public HttpResponseMessage Get(string RepID, string Tag)

然后

return Request.CreateResponse(HttpStatusCode.OK, result, Configuration.Formatters.JsonFormatter);

在你想要返回的 catch 块中

Request.CreateErrorResponse(HttpStatusCode.NotFound, "Data Not Found");

起亚卡哈 asmgx,

迈克·史密斯

【讨论】:

  • 您能以任何方式验证您声称的最佳实践吗?
  • 好问题。通常,您希望从 API 处理错误响应以及使用来自 API 的适当 HTTP 结果的成功响应 - 例如 (200 Ok)、(404 Not Found) 等。您可以返回字符串/json 作为返回类型但我个人会避免这种情况,因为我更愿意告知客户正确的响应类型。干杯
【解决方案2】:

你需要改变

    [Route("api/RepsSelect/{RepID}/{Tag}")]
    public string Get(string RepID, string Tag)

    [Route("api/RepsSelect/{RepID}/{Tag}")]
    public JsonResult Get(string RepID, string Tag)

【讨论】:

  • 为什么?为什么这样做反对在方法中序列化而不修改返回方法签名?即为什么有必要做出改变?
猜你喜欢
  • 2022-01-24
  • 2018-01-23
  • 2021-05-17
  • 2017-11-07
  • 2020-01-09
  • 1970-01-01
  • 2013-10-09
  • 2017-05-23
  • 1970-01-01
相关资源
最近更新 更多