【问题标题】:Angular Http Options and Delete sends two requests?Angular Http Options 和 Delete 发送两个请求?
【发布时间】:2018-05-28 12:25:03
【问题描述】:

我正在尝试向服务器发送请求以根据 id 删除对象。我使用 Web Api 作为后端。

角度

removable: string = 'http://localhost:49579/api/resource/remove/28';

     this._http.options(removable,{headers}).subscribe((value)=>console.log("success"),(error)=>console.log(error));

WebApi

    [HttpOptions]
    [Route("api/resource/remove/{id}")]
    public IHttpActionResult Delete([FromUri] int id)
    {

        if (MovieRepository.Remove(id))
        {
            return Ok("Movie was removed");
        }
        else
        {
            return BadRequest("Movie was not removed");
        }
    }
}

我收到两个请求,一个是 OK,另一个是 Bad Request。我也用 Http DELETE 尝试过,但它产生了相同的效果。我做错了什么?

【问题讨论】:

    标签: angular asp.net-web-api2


    【解决方案1】:

    尝试更改为实际的 DELETE 请求:

    this._http.delete(removable,{headers}).subscribe((value)=>console.log("success"),(error)=>console.log(error));
    

    不知道你为什么要手动调用options 请求,Angular 已经为你提出的每个请求都这样做了。

    【讨论】:

    • 然后它发送选项请求和删除请求。选项没问题,删除返回 405 方法不允许
    • 那么你必须在后端改变一些东西。我没有使用过 WebApi,所以我不知道该怎么做,我只知道发送两个选项请求听起来确实是错误的,而你实际上想要做的是 1 个选项和 1 个删除。
    【解决方案2】:

    我之前遇到过同样的问题,这是与 CORS 相关的预期行为

    然后您将在服务器端有两个请求,但在前端只有一个回调响应,所以我的建议是在服务器端验证第一个 OPTION 请求,然后在前端您将只得到一个回调响应

    reference

    【讨论】:

      猜你喜欢
      • 2013-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      相关资源
      最近更新 更多