为什么不能用Web API 2编辑记录?这不可能吗?

为什么不能用Web API 2编辑记录?这不可能吗?

问题描述:

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

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

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

有没有人甚至没有注意到这个API不能完全工作?我不知道还有什么要问的! ASP.NET论坛上没有人知道如何去做。

HURL.IT

  1. yoururl/API /对象/ ID
  2. 参数字段名:值(全部)
  3. 点击 “启动请求”
  4. 字段被编辑

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

邮差 - 同上(或多或少)

代码中的控制器:

// 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); 
    } 
+0

[如何创建一个最小的,完整的,并且可验证的示例](http://*.com/help/mcve)的您已经尝试了什么至今。这样人们可以用它来重现问题并给出更好的答案。 – Nkosi

+0

[为什么我不能使用hurl.it或POSTMAN在Web API 2上执行简单的PUT编辑?](http://*.com/questions/36800616/why-can-i-not-perform-a -simple-put-edit-on-web-api-2-use-hurl-it-or-postman) – Nkosi

+0

HTTP PUT - 我在问题中说过。这是一个简单的HTTP请求。你使用PUT,URL和id,然后把参数。它不适用于web api2。这是一个API,所以我假设它可以执行操作来编辑记录 - 它给出了一个400错误,似乎没有关于它为什么不起作用的信息。 –

如果您正在使用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 }, 
); 
//....