【问题标题】:Why can you not edit records with Web API 2? Is it not possible?为什么不能使用 Web API 2 编辑记录?不可能吗?
【发布时间】:2016-04-23 12:00:59
【问题描述】:

没有人知道如何编辑记录!没有人执行此操作吗? POST、GET 和 DELETE 都可以工作,但 PUT,不管你做什么,都不起作用。没有人使用 ASP.NET 中的 Web API2 编辑记录吗?

我同时使用了 Hurl.it 和 POSTMAN,但它们都不能使用 PUT 执行编辑。它只会产生 400 错误 - 没有关于错误的信息,因为请求没有任何问题!

世界上是否有人设法用这个编辑记录?当赏金可用时,我将尽我所能 - 请有人告诉我们如何执行此操作。

怎么没人注意到这个 API 不能完全工作?我不知道还有什么地方可以问! ASP.NET 论坛上也没有人知道该怎么做。

HURL.IT

  1. 你的网址/api/objects/id
  2. 参数字段名:值(全部)
  3. 点击“启动请求”
  4. 字段被编辑

在 Web API 2 - 400 错误...没有其他信息(因为请求没有任何问题)

POSTMAN - 与上面相同(或多或少)

控制器内的代码:

// PUT: api/Table1s/5
    [ResponseType(typeof(void))]
    public IHttpActionResult PutTable1(int id, Table1 table1)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        if (id != table1.TestID)
        {
            return BadRequest();
        }

        db.Entry(table1).State = EntityState.Modified;

        try
        {
            db.SaveChanges();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!Table1Exists(id))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return StatusCode(HttpStatusCode.NoContent);
    }

【问题讨论】:

  • How to create a Minimal, Complete, and Verifiable example 你到目前为止所尝试的。这样人们就可以用它来重现问题并给出更好的答案。
  • HTTP PUT - 我在问题中说过。这是一个简单的 HTTP 请求。您使用 PUT、URL 和 id,然后输入参数。它在 web api2 中不起作用。它是一个 API,所以我假设它可以执行操作来编辑记录 - 它给出 400 错误,并且似乎没有关于它为什么不起作用的信息。
  • 它是在 Web API 2 项目中自动创建的。该方法在那里,因为它是脚手架的。我没有对代码进行任何修改,所以它只是带有默认脚手架的 Web API 2。
  • 您得到 400 Bad Request 而不是 405 Method Not Allowed 的事实至少应该使 Put b> 可以使用。我在创建 RESTful api 时一直使用它。如果您希望其他人为您提供帮助,您需要提供有关您的设置方式以及如何提出请求的更多信息。

标签: asp.net asp.net-web-api asp.net-web-api2


【解决方案1】:

如果您使用的是Attribute Routing,您的控制器可能看起来像这样...

[RoutePrefix("api/Table1s")]
public class Table1Controller : ApiController {

    // PUT: api/Table1s/5
    [HttpPut]
    [Route("{id:int}")]
    [ResponseType(typeof(void))]
    public IHttpActionResult PutTable1(int id, [FromBody]Table1 table1) {...}

}

对该操作的请求可能看起来像...

PUT http://localhost:5076/api/Table1s/5 HTTP/1.1
User-Agent: Fiddler
Host: localhost:5076
Content-Type: application/json
Content-Length: 55

{
  "fieldname1":"value1",
  "fieldname2":"value2"
}

确保您在默认配置中配置了属性路由

//....
config.MapHttpAttributeRoutes()

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional },
);
//....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多