使用List<>进行C#Web API响应处理

时间:2017-08-21 17:12:31

标签: c# entity-framework asp.net-web-api

我有一个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();

}

感谢一些有关如何正确执行此操作的帮助和指示。

4 个答案:

答案 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
    }