【问题标题】:Web API 2 Http Post MethodWeb API 2 Http Post 方法
【发布时间】:2015-01-08 03:14:48
【问题描述】:

我很反感没有找到解决这个问题的方法。

我开始使用 Web API 2 创建一个新的 api,但无法让 POST 和 PUT 工作。 Get all 和 Get single item 效果很好。

在任何地方都没有相关文章,我发现的文章仅与 Gets 和 Web API 有关,与 Web API 2 无关。

请提供任何帮助。

    // POST: api/checkOuts
    [HttpPost]
    [ResponseType(typeof(checkOut))]
    [ApiExplorerSettings(IgnoreApi = true)]
    public async Task<IHttpActionResult> PostcheckOut(checkOut co)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        db.checkOuts.Add(checkOut);

        try
        {
            await db.SaveChangesAsync();
        }
        catch (DbUpdateException)
        {
            if (checkOutExists(checkOut.id))
            {
                return Conflict();
            }
            else
            {
                throw;
            }
        }

        return CreatedAtRoute("DefaultApi", new { id = checkOut.id }, checkOut);
    }

所以基本上,我只是在尝试调试该方法。

对这个链接特别失望,因为它几乎涵盖了所有内容,但 ai。 http://www.asp.net/web-api/overview/web-api-routing-and-actions/create-a-rest-api-with-attribute-routing

问候

【问题讨论】:

  • 您还可以发布周围的类声明吗?在测试时您是否在 REST 客户端中将请求类型设置为 HTTP POST?
  • 谢谢,我已按照要求使用代码编辑了我的帖子。是的,我将其设置为使用 Chrome Postman、FireFox RestClient 和 FireFox Poster 发布和测试,错误代码 405 已返回。 PS!路由不是问题。
  • 有一篇关于在发布 WebAPI 2 应用程序后解决 405 错误的文章,我不确定这是否提供任何帮助:http://www.asp.net/web-api/overview/testing-and-debugging/troubleshooting-http-405-errors-after-publishing-web-api-applications
  • 我现在已经测试过了,仍然没有运气,至少我现在对 405 错误有了更好的理解。

标签: c# asp.net-web-api2


【解决方案1】:

这是一个有效的代码

        // POST api/values
        [HttpPost]
        [ResponseType(typeof(CheckOut))]
        public async Task<IHttpActionResult> Post([FromBody] CheckOut checkOut)
        {
            if (checkOut == null)
            {
                return BadRequest("Invalid passed data");
            }

            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            db.checkOuts.Add(checkOut);

            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                if (checkOutExists(checkOut.id))
                {
                    return Conflict();
                }
                else
                {
                    throw;
                }
            }

            return CreatedAtRoute("DefaultApi", new { id = checkOut.Id }, checkOut);
        }

我已经声明 CheckOut 类是这样的:

public class CheckOut
{
   public int Id { get; set; }
   public string Property2 { get; set; }
}

这里的关键是:

1- 您需要将 [FromBody] 添加到您的 Api 方法中。 2-我已经使用 Fiddler 对其进行了测试, i- 通过选择 POST 操作。 ii- 内容类型:应用程序/json。 iii- 在消息正文中传递 {"Id":1,"Property2":"Anything"}。

希望对您有所帮助。

【讨论】:

  • 谢谢,但我仍然遇到相同的 405 错误。我不确定这是否与环境或什么有关,因为我创建了一个新的 API 项目并且仍然遇到相同的问题
  • 你想让我把我测试过的项目发给你吗?我可以和你分享。
  • 谢谢,将不胜感激。
  • 您可以从此链接dropbox.com/s/2727kx7f61dr8cn/WebApi2Test.zip?dl=0下载项目文件
  • 解决方案运行良好。奇怪的是,我的代码是相同的,但仍然无法正常工作。当然它必须与引用或 web.config 中的内容有关,但可以使用您的解决方案继续调查。
猜你喜欢
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
  • 2018-08-22
  • 2017-05-16
  • 1970-01-01
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多