首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用List<>的C# Web API响应处理

使用List<>的C# Web API响应处理
EN

Stack Overflow用户
提问于 2017-08-22 01:12:31
回答 4查看 1.7K关注 0票数 1

我有一个POST方法,它将返回用户的项目列表,由于我对c# web api非常陌生,如果Id为空、空或无效,我将很难设置正确的条件和响应。我尝试过类似的响应,但不起作用,主要是因为这些示例使用的是iHttpActionResult而不是List<>

以下是我的控制器中的代码,我不确定要将它放在我提供的注释中:

代码语言:javascript
运行
复制
[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();

}

感谢一些关于如何正确地做这件事的帮助和一些指导。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-08-22 01:30:28

方法将需要更新以实现该级别的灵活性。

代码语言:javascript
运行
复制
[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);    
}
票数 1
EN

Stack Overflow用户

发布于 2017-08-22 01:18:42

将返回类型更改为IHttpActionResult

要返回400错误请求,请返回BadRequest()

要返回404Not FOUND,请返回NotFound()

要返回列表数据,请返回Ok(vs1)

有关详细信息,请参阅documentation

可选:如果您正在使用诸如Swagger或Web Api帮助页之类的文档工具,还要将[ResponseType(typeof(List<ValueStory>))]属性添加到您的操作方法中。

票数 5
EN

Stack Overflow用户

发布于 2017-08-22 01:21:55

如果您真的想保留返回数据类型(我认为您不应该这样做,请按照另一个答案中的说明进行操作),那么您可以按照Exception Handling in ASP.NET Web API中的描述抛出异常

要使用特定的HTTP代码抛出一个简单的异常,请使用:

代码语言:javascript
运行
复制
throw new HttpResponseException(HttpStatusCode.NotFound);

要指定消息,您可以执行以下操作:

代码语言:javascript
运行
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45802507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档