1.学习心得

当你搜到这个问题时,就表示你已经知道了脚本POST请求接口时,会先执行一次OPTIONS类型的请求。至于为什么会这样,在此就不做描述了,想知道的小伙伴可以查一下;本文主要将我在现实中遇到的问题以及怎么解决的做一个描述;这是我第一次写,不合适的地方还请见谅。

虽然说OPTIONS请求时不太重要,但服务端还是会接收并处理的,当我们忽略这次操作去写代码的时候,很大可能会栽在这里。

2.问题描述

当时我在写一个webapi类型的项目,在对项目进行允许跨域访问设置后,就开始写接口了。

设置代码如下:

2.1 在全局应用函数Global.asax中加入

 protected void Application_BeginRequest()
{
//OPTIONS请求方法的主要作用:
//1、获取服务器支持的HTTP请求方法;也是黑客经常使用的方法。
//2、用来检查服务器的性能。如:AJAX进行跨域请求时的预检,需要向另外一个域名的资源发送一个HTTP OPTIONS请求头,用以判断实际发送的请求是否安全。
if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
{
//表示对输出的内容进行缓冲,执行page.Response.Flush()时,会等所有内容缓冲完毕,将内容发送到客户端。
//这样就不会出错,造成页面卡死状态,让用户无限制的等下去
Response.Flush(); }
}

2.2 在配置文件中加入

<system.webServer>
<httpProtocol>
<!--新增加-->
<customHeaders>
<add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET" />
<add name="Access-Control-Allow-Headers" value="x-requested-with,content-type,clientKey,token" />
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Expose-Headers" value="servicekey"/>
</customHeaders>
</httpProtocol>
</system.webServer>

说到这里,顺便说一下,配置文件中的两处我自定义的参数值是什么意思

这个代表接口请求方,可以在头部添加“clientkey”,“token”这两个key;

这个代表接口返回时,调用方可以获取头部信息的哪些key。

调用的时候才发现,由于OPTIONS请求没有携带参数,导致我接口处理的时候,参数接收不到,而我也没有处理参数为空的情况;虽说犯这种错误我也有点不好意思,但我觉得并不是加个参数为空的处理就能完美解决的。

当然,这么解决貌似也可以。

3.解决方案

我的出发点是要让接口处理时,如果碰到OPTIONS请求,就不让接口进控制器了,直接结束此次执行。于是我就在全局应用函数Global.asax中多加了一行代码

这样一来,打断点是不走控制器了。那问题也解决了。

4.总结

虽然这样是可以解决问题,但并不是所有业务都需要这样写。解决问题应从实际出发,了解问题本质,在解决问题。有时间的小伙伴可以了解一下OPTIONS请求的原因,再结合自己的业务,多考虑一下,是否合适。

此文由博主精心撰写转载请保留此原文链接

版权声明:如有雷同纯属巧合,如有侵权请及时联系本人修改,谢谢!!!

js POST调用api接口时,由于OPTIONS请求导致服务器异常的更多相关文章

  1. php下api接口的并发http请求

    php下api接口的并发http请求 ,提高app一个页面请求多个api接口,页面加载慢的问题: func_helper.php/** * 并发http请求 * * [ * 'url' //请求地址 ...

  2. 使用egg.js开发后端API接口系统

    什么是Egg.js Egg.js 为企业级框架和应用而生,我们希望由 Egg.js 孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本.详细的了解可以参考Egg.js的官网:https:// ...

  3. web api写api接口时返回

    web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法) 找到Global.asax文件,在Applic ...

  4. C#使用windows服务定时调用api接口

    使用VS创建windows服务项目: 创建好项目  会出现一个设计界面 右键弹出对话框 选择添加安装程序 名字什么的自己可以改: 项目目录: 打开项目中的ProjectInstaller.Design ...

  5. Python调用API接口的几种方式 数据库 脚本

    Python调用API接口的几种方式 2018-01-08 gaoeb97nd... 转自 one_day_day... 修改 微信分享: 相信做过自动化运维的同学都用过API接口来完成某些动作.AP ...

  6. Python调用API接口的几种方式

    Python调用API接口的几种方式 相信做过自动化运维的同学都用过API接口来完成某些动作.API是一套成熟系统所必需的接口,可以被其他系统或脚本来调用,这也是自动化运维的必修课. 本文主要介绍py ...

  7. 调用API接口,查询手机号码归属地(3)

    从mysql数据库获取电话号码,查询归属地并插入到数据库 #!/usr/bin/python # -*- coding: utf-8 -*- import json, urllib, sys, pym ...

  8. 调用API接口,查询手机号码归属地(2)

    使用pymysql pip install pymysql 创建mysql测试表 CREATE TABLE `userinfo` ( `id` int(20) NOT NULL AUTO_INCREM ...

  9. 调用API接口,查询手机号码归属地(1)

    使用https://www.juhe.cn/提供的接口,查询归属地 在官网注册key即可使用. 代码如下 #!/usr/bin/python # -*- coding: utf-8 -*- impor ...

随机推荐

  1. 打包发布 Qt Quick/Widgets 程序

    使用的QT自带的部署工具(windeployqt.exe,路径QT安装路径),版本替换debug/release Qt Quick "C:\Qt\Qt5.8.0\5.8\mingw53_32 ...

  2. conda+豆瓣源配置tensorflow+keras环境

    conda+豆瓣源配置tensorflow+keras环境 安装anaconda 打开Anaconda Prompt 创建虚拟环境 conda create -n myenv python=3.5 a ...

  3. 你不知道的前端SDK开发技巧

    最近在做公司内部的一个的一个SDK的重构,这里总结一些经验分享给大家. 类型检查和智能提示 作为一个SDK,我们的目标是让使用者能够减少查看文档的时间,所以我们需要提供一些类型的检查和智能提示,一般我 ...

  4. SQL注入笔记-updatexml与extractvalue

    0x1介绍 MySQL 5.1.5版本中添加了对XML文档进行查询和修改的函数 EXTRACTVALUE(XML_document, XPath_string); UPDATEXML(XML_docu ...

  5. 【ASP.NET Core】mdl conflicts with tinymce

    When I implementd the popular Richtext Editor tinymce for this web application, it conflicts with ma ...

  6. 一文搞定 Spring Data JPA

    Spring Data JPA 是在 JPA 规范的基础上进行进一步封装的产物,和之前的 JDBC.slf4j 这些一样,只定义了一系列的接口.具体在使用的过程中,一般接入的是 Hibernate 的 ...

  7. JavaScript图片预览

    预览选中的图片文件 jQuery $("#selectImage").change(function(){ $("#image").attr("src ...

  8. Django---drf第一天

    目录 1 序列化组件介绍 2 简单使用 3 序列化类的字段类型 4 序列化字段选项 5 序列化组件修改数据 6 read_only和write_only 7查询所有 8 新增数据 9 删除一个数据 1 ...

  9. Java并发编程——为什么要用volatile关键字

    首发地址 https://blog.leapmie.com/archives/66ba646f/ 日常编程中出现 volatile 关键字的频率并不高,大家可能对 volatile 关键字比较陌生,再 ...

  10. response对象乱码--解决

    中文乱码 响应对象中文乱码,即就是response对象乱码. response对象输出中文数据乱码解决方案: 1 字节流输出响应乱码. 该情况不一定乱码.但是解决乱码的步骤是: 1) 设置浏览器打开文 ...