获取Api - 删除 - 对预检请求的响应未通过访问控制检查

时间:2017-08-04 09:24:51

标签: reactjs asp.net-web-api cors fetch-api http-delete

我得到了很多解决方案,没有人帮我。我已经按照所有解决方案设置了所有必需的标题。仍显示以下错误。

  

无法加载Fetch API   http://localhost:25424/api/Employee/DeleteEmployee/1。回应   预检请求未通过访问控制检查:否   请求中存在“Access-Control-Allow-Origin”标头   资源。因此不允许来源“http://localhost:7777”   访问。响应具有HTTP状态代码404.如果是不透明的响应   满足您的需求,将请求的模式设置为'no-cors'来获取   CORS禁用的资源。

我的获取请求:

fetch('http://localhost:25424/api/Employee/DeleteEmployee/' +1, {
    method: "DELETE",       
    headers: {    
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    'Access-Control-Allow-Origin' : '*' ,
    'Access-Control-Allow-Headers'  : 'Origin, X-Requested-With, Content-Type, Accept',
    'Access-Control-Allow-Methods' : 'DELETE',
     'mode'  : 'cors' 

    }, 

    })
    .then(function(resp){

    })

我尝试了设置模式:no-cors也。

我的网络API代码:

 [EnableCors(origins: "*", headers: "*", methods: "*")]
    public class EmployeeController : ApiController
    { 
        [HttpDelete]
        public IHttpActionResult DeleteEmployee(int id)
        {
            using (var ctx = new Employee())
            {
                var existingemp = ctx.tempemp.Where(s => s.Id == id).FirstOrDefault();
                ctx.Entry(existingemp).State = System.Data.Entity.EntityState.Deleted;
                ctx.SaveChanges();
            }
            return Ok();
        }
    }

我在WebApiConfig.cs中也设置了CORS

var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors); 

提前致谢。

2 个答案:

答案 0 :(得分:1)

通过

设置适当的访问控制标题绝对需要

http://localhost:25424/api/Employee/DeleteEmployee/,允许http://localhost:7777进行允许删除

  • 通过正常请求检查浏览器的网络面板
  • 打开有问题的网络请求 - 执行edit and resend(假设是firefox)
  • 添加请求标头Origin:http://localhost并重新发送请求

发布回复标题。

此外,

  • 在重新发送请求时选择要删除的其他用户,或者在解决方案之前可能采用与delete不同的方法进行故障排除

注意请确保您要求的内容不会为您提供404

当您查看响应标题时,如果您没有看到Access-control-allow-origin允许localhost:7777,或者,

Access-control-allow-methods允许删除,您的请求绑定失败。

在这种情况下,您可能尚未正确配置端口25424上的API,以发送这些响应

答案 1 :(得分:-1)

我在2小时后自己解决了问题。 问题是我忘记在我的请求中加上'id?='。

fetch('http://localhost:25424/api/Employee/DeleteEmployee/' +1,

而不是这个。我在下面用来解决这个问题。

fetch('http://localhost:25424/api/Employee/DeleteEmployee?id=' +1,