我有一个POST方法,它将返回用户的项目列表,由于我对c# web api非常陌生,如果Id为空、空或无效,我将很难设置正确的条件和响应。我尝试过类似的响应,但不起作用,主要是因为这些示例使用的是iHttpActionResult而不是List<>
以下是我的控制器中的代码,我不确定要将它放在我提供的注释中:
[HttpPost]
public List<ValueStory> UserValueStories ([FromBody] ValueStory valuestory)
//public void UserValueStories([FromBody] ValueStory Id)
{
if (valuestory.Id == "" || valuestory.Id == null)
{
//what code to add to change status code to 400 and to display error message?
}
//what code to put if the id is not valid, what status code and what message?
var valueStoryName = (from vs in db.ValueStories
where vs.Id == valuestory.Id
select vs).ToList();
List<ValueStory> vs1 = new List<ValueStory>();
foreach (var v in valueStoryName)
{
vs1.Add(new ValueStory()
{
Id = v.Id,
ValueStoryName = v.ValueStoryName,
Organization = v.Organization,
Industry = v.Industry,
Location = v.Location,
AnnualRevenue = v.AnnualRevenue,
CreatedDate = v.CreatedDate,
ModifiedDate = v.ModifiedDate,
MutualActionPlan = v.MutualActionPlan,
Currency = v.Currency,
VSId = v.VSId
});
}
return vs1.ToList();
}
感谢一些关于如何正确地做这件事的帮助和一些指导。
发布于 2017-08-22 01:30:28
方法将需要更新以实现该级别的灵活性。
[HttpPost]
[ResponseType(typeof(List<ValueStory>))]
public IHttpActionResult UserValueStories ([FromBody] ValueStory valuestory) {
if (valuestory.Id == "" || valuestory.Id == null) {
//what code to add to change status code to 400 and to display error message?
return BadRequest("error message");
}
var valueStoryName = (from vs in db.ValueStories
where vs.Id == valuestory.Id
select vs).ToList();
var vs1 = new List<ValueStory>();
foreach (var v in valueStoryName) {
vs1.Add(new ValueStory() {
Id = v.Id,
ValueStoryName = v.ValueStoryName,
Organization = v.Organization,
Industry = v.Industry,
Location = v.Location,
AnnualRevenue = v.AnnualRevenue,
CreatedDate = v.CreatedDate,
ModifiedDate = v.ModifiedDate,
MutualActionPlan = v.MutualActionPlan,
Currency = v.Currency,
VSId = v.VSId
});
}
return Ok(vs1);
}
发布于 2017-08-22 01:18:42
将返回类型更改为IHttpActionResult
。
要返回400错误请求,请返回BadRequest()
。
要返回404Not FOUND,请返回NotFound()
。
要返回列表数据,请返回Ok(vs1)
。
有关详细信息,请参阅documentation。
可选:如果您正在使用诸如Swagger或Web Api帮助页之类的文档工具,还要将[ResponseType(typeof(List<ValueStory>))]
属性添加到您的操作方法中。
发布于 2017-08-22 01:21:55
如果您真的想保留返回数据类型(我认为您不应该这样做,请按照另一个答案中的说明进行操作),那么您可以按照Exception Handling in ASP.NET Web API中的描述抛出异常
要使用特定的HTTP代码抛出一个简单的异常,请使用:
throw new HttpResponseException(HttpStatusCode.NotFound);
要指定消息,您可以执行以下操作:
var resp = new HttpResponseMessage(HttpStatusCode.NotFound)
{
Content = new StringContent(string.Format("No product with ID = {0}", id)), ReasonPhrase = "Product ID Not Found"
}
throw new HttpResponseException(resp);
https://stackoverflow.com/questions/45802507
复制相似问题