如何在postman中的post操作中将id存储在环境变量中?

问题描述 投票:0回答:1

我无法在邮递员TEST中设置环境变量。我的响应主体仅在执行POST操作后显示1。在响应头中,我得到Transfer-Encoding→chunked,Content-Type→application / json; charset = utf-8等...我不完全是Transfer-Encoding创建问题吗?

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;
        }
    }
c# api asp.net-core web-api-testing
1个回答
2
投票

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

Javascript代码:

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

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

但是服务器代码只返回行数:

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作为单个结果返回,例如:

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代码是正确的

© www.soinside.com 2019 - 2024. All rights reserved.