我有一个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();
}
感谢一些有关如何正确执行此操作的帮助和指示。
答案 0 :(得分:5)
将您的退货类型更改为IHttpActionResult
。
要返回400 BAD REQUEST,请返回BadRequest()
。
要返回404 NOT FOUND,请返回NotFound()
。
要返回列表数据,请返回Ok(vs1)
。
有关详细信息,请参阅documentation。
可选:如果您使用的是Swagger或Web Api帮助页面等文档工具,请在操作方法中添加[ResponseType(typeof(List<ValueStory>))]
属性。
答案 1 :(得分:1)
如果您真的想保留您的返回数据类型(我认为您不应该这样做,请按照其他答案中的说明执行),那么您可以按照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);
答案 2 :(得分:1)
需要更新方法以实现该级别的灵活性
[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);
}
答案 3 :(得分:1)
根据我在Web API上的知识,在POST方法中,您必须返回调用的结果(或与List一起)。
最好创建一个新模型,它将存储POST调用的数据(List)和结果(错误消息和状态代码)。
根据Id,您可以添加相应的错误消息和代码。 如果数据无效,您可以将数据设为空。
模型可能如下所示。
class Model{
string errorMsg,
string statusCode,
List<ValueStory> data
}