为什么不能用Web API 2编辑记录?这不可能吗?
问题描述:
没有人知道如何编辑记录!没有人执行此操作吗? POST,GET和DELETE都可以工作,但PUT,不管你做什么,都不起作用。没有人使用ASP.NET的Web API2编辑记录?为什么不能用Web API 2编辑记录?这不可能吗?
我已经使用Hurl.it和POSTMAN,它们都不能使用PUT执行编辑。它只会产生一个400错误 - 没有关于错误的信息,因为请求没有任何错误!
世界上有人设法用此编辑记录吗?当赏金可用时,我会尽我所能 - 请有人告诉我们如何执行此操作。
有没有人甚至没有注意到这个API不能完全工作?我不知道还有什么要问的! ASP.NET论坛上没有人知道如何去做。
HURL.IT
- yoururl/API /对象/ ID
- 参数字段名:值(全部)
- 点击 “启动请求”
- 字段被编辑
在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);
}
答
如果您正在使用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 },
);
//....
[如何创建一个最小的,完整的,并且可验证的示例](http://stackoverflow.com/help/mcve)的您已经尝试了什么至今。这样人们可以用它来重现问题并给出更好的答案。 – Nkosi
[为什么我不能使用hurl.it或POSTMAN在Web API 2上执行简单的PUT编辑?](http://stackoverflow.com/questions/36800616/why-can-i-not-perform-a -simple-put-edit-on-web-api-2-use-hurl-it-or-postman) – Nkosi
HTTP PUT - 我在问题中说过。这是一个简单的HTTP请求。你使用PUT,URL和id,然后把参数。它不适用于web api2。这是一个API,所以我假设它可以执行操作来编辑记录 - 它给出了一个400错误,似乎没有关于它为什么不起作用的信息。 –