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

时间:2016-04-23 12:00:59

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

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

我已经使用过Hurl.it和POSTMAN,并且其中任何一个都无法使用PUT执行编辑。它只产生400错误 - 没有关于错误的信息,因为请求没有任何问题!

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

怎么没有人注意到这个API不能完全运行?我不知道还有什么要问的! ASP.NET论坛上没有人知道如何做到这一点。

HURL.IT

  1. yoururl / API /对象/ ID
  2. 参数fieldname:value(all)
  3. 点击“启动请求”
  4. 该字段已被编辑
  5. 在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);
        }
    

1 个答案:

答案 0 :(得分: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 },
);
//....