如何在邮递员的邮政操作中将id存储在环境变量中?

时间:2019-04-10 07:10:27

标签: c# api asp.net-core web-api-testing

我无法在邮递员TEST中设置环境变量。 我的响应正文在执行POST操作后仅显示1。在响应头中,我得到Transfer-Encoding→分块,Content-Type→application / json; charset = utf-8等等...我不完全是在传输编码方面造成问题吗?

postman error screen1

postman error screen2

public JsonResult CreateCustomer([FromBody]Customer customer)
    {
        try
        {
            BaseDataAccess baseDataAccess = new BaseDataAccess(_config["ConnectionStrings:DefaultConnection"]);

            List<DbParameter> parametersList = new List<DbParameter>();

            parametersList.Add(baseDataAccess.GetParameter("StatementType", "Insert"));
            parametersList.Add(baseDataAccess.GetParameter("Name", customer.Name));
            parametersList.Add(baseDataAccess.GetParameter("Email", customer.Email));
            parametersList.Add(baseDataAccess.GetParameter("PrimaryPhone", customer.PrimaryPhone));
            parametersList.Add(baseDataAccess.GetParameter("AlternatePhone", customer.AlternatePhone));
            parametersList.Add(baseDataAccess.GetParameter("Address1", customer.Address1));
            parametersList.Add(baseDataAccess.GetParameter("Address2", customer.Address2));
            parametersList.Add(baseDataAccess.GetParameter("Address3", customer.Address3));
            parametersList.Add(baseDataAccess.GetParameter("City", customer.City));
            parametersList.Add(baseDataAccess.GetParameter("State", customer.State));
            parametersList.Add(baseDataAccess.GetParameter("Country", customer.Country));
            parametersList.Add(baseDataAccess.GetParameter("Zip", customer.Zip));

            return Json(baseDataAccess.ExecuteNonQuery("[dbo].[CreateCustomer]", parametersList, CommandType.StoredProcedure));
        }
        catch (Exception e)
        {
            throw e;
        }
    }

1 个答案:

答案 0 :(得分:2)

我怀疑这个问题涉及一些误解。 ExecuteNonQuery的结果与存储过程的输出代码或结果相混淆。 return Json(..)传递了一个数字,但是Javascript代码期望响应包含一个对象。 Environment variable似乎与问题无关。

Javascript代码:

var jsonData = JSON.parse(responseBody);
...
.... jsonData.customerId);

期望响应包含一个JSON字符串,该字符串包含具有customerId属性的单个对象。

尽管服务器代码只返回行数:

return Json(baseDataAccess.ExecuteNonQuery("[dbo].[CreateCustomer]", parametersList, CommandType.StoredProcedure));

ExecuteNonQuery返回受查询或存储过程影响的行数。插入一行将返回1。它返回存储过程的结果或输出参数。

这意味着服务器有效地执行了此操作:

return Json(1);

响应将包含一个简单的1

要返回带有customerId的JSON对象,代码应更改为:

var newItem=new {customerId=thatNewId;};
return Json(newItem);

这将返回{'customerId: 1234},即Javascript所期望的。

在不知道存储过程做什么的情况下,只能猜测如何提取新ID。 C#代码中没有输出参数,因此我假设ID作为单个结果返回,例如::p

SELECT @@IDENTITY;

该网络应用应使用ExecuteScalar

var thatNewId = baseDataAccess.ExecuteScalar("[dbo].[CreateCustomer]", 
                                              parametersList, 
                                              CommandType.StoredProcedure);

将它们放在一起:

var thatNewId = baseDataAccess.ExecuteScalar("[dbo].[CreateCustomer]", 
                                              parametersList, 
                                              CommandType.StoredProcedure);
var newItem=new {customerId=thatNewId;};
return Json(newItem);

我只是假设POSTMAN代码是正确的