我正在使用.net core C#,WebApi和AngularJs。
为保存数据,我的Angularjs代码对WebApi进行了$ http调用。我可以很好地从api返回单个数据,但是不确定在这里返回多个值的最佳方法是什么。我可以将其用逗号分隔,然后再返回,但想知道是否有更好的方法。
因此,基本上,当API将数据保存到我的数据库时,我想返回一个变量,布尔值(如果保存成功)以及异常消息(如果保存不成功)。下面是我的代码。
AngularJs代码:
service.saveData(data).then(function (res) {
//get someDataToReturn, dataSaved & exception raised if any from db save here.
}, function (err) {
});
WebApi代码:
[HttpPost("data/save")]
public async Task<IActionResult> SaveData([FromBody] List<UserData> data)
{
bool dataSaved = true;
string someDataToReturn = string.Empty;
//do some processing and updating someDataToReturn here
//Saving data to DB
dataSaved = SaveData(data);
//I want to return someDataToReturn, dataSaved(true or false) and exception raised from SaveData if any
return Ok(someDataToReturn);
}
//DB Call to save data
public bool SaveData(List<UserData> data)
{
try
{
foreach (var set in data)
{
//creating query etc
_db.Execute(query);
}
return true;
}
catch (SqlException ex)
{
}
return false;
}
让我知道最好的方法。
答案 0 :(得分:1)
首先,您应该检查请求正文中的值是否正确填充。
看看DataAnnotations。 您可以使用注释来指定模型中哪些属性是必需的,最小和最大长度等。
这是一个有关如何定义UserData类所需的Name属性的示例
public class UserData
{
[Required]
public string Name { get; set; }
}
如果请求模型不满足UserData类DataAnnotations上设置的指定规则,则上下文ModelState将设置为false并包含DataAnnotations错误。 可以用来确定当前请求是否为错误请求,并从中返回正确的http状态代码。
[HttpPost("data/save")]
public async Task<IActionResult> SaveData([FromBody] List<UserData> data)
{
if (!ModelState.IsValid)
return BadRequest(ModelState); //will return a 400 code
...
然后关于SaveData方法。在控制器中捕获异常并从那里返回正确的状态代码
[HttpPost("data/save")]
public async Task<IActionResult> SaveData([FromBody] List<UserData> data)
{
if (!ModelState.IsValid)
return BadRequest(ModelState); //400 status code
try
{
SaveData(data);
}
catch(Exception e)
{
return InternalServerError(e); //500 status code
}
string someDataToReturn = string.Empty;
return Ok(someDataToReturn ); //200 status code
}
public void SaveData(List<UserData> data)
{
foreach (var set in data)
{
//creating query etc
_db.Execute(query);
}
}
答案 1 :(得分:0)
您可以使用Controller
类方法Json(object data)
。像这样:
[HttpPost("data/save")]
public async Task<IActionResult> SaveData([FromBody] List<UserData> data)
{
return this.Json(SaveData(data));
}
请参见this。
答案 2 :(得分:0)
您可以创建一个实体并将其返回
public class BaseResult{
public bool Result{get;set;}
public string Errors{get;set;}
}
或仅
return Ok( new { result = dataSaved , error= exception.Message});
答案 3 :(得分:0)
标准方法是:
返回201状态码
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/201
[HttpPost("data/save")]
public async Task<IHttpActionResult> SaveData([FromBody] List<UserData> data)
{
try
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
// return response of 201 if you created the resource successfully
// typically return this with a uri to the new resource
return Created("location", saveData(data));
}
catch (Exception)
{
return InternalServerError();
}
}