我无法在邮递员TEST中设置环境变量。我的响应主体仅在执行POST操作后显示1。在响应头中,我得到Transfer-Encoding→chunked,Content-Type→application / json; charset = utf-8等...我不完全是Transfer-Encoding创建问题吗?
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;
}
}
我怀疑这个问题涉及到几个误解。 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代码是正确的