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