关于Web API 2.0中的Options请求返回405的问题

2023-05-16

关于Web API 2.0中的Options请求返回405的问题

前提:IIS寄宿的网站

当你向服务器发送非简单请求时,客户端会先发送一条预检请求,借以确认当前请求源和待请求方法是否被网站允许。(关于这种Http请求的详细信息,请在道友的文章中学习)

道友的文章写的很好,其提供的解决方案是使用一个微软公司提供的官方DLL。为了不被DLL蒙在鼓里,本文提供了另外一种解决思路。

当客户端向服务器发送Options请求时,Web API 2.0默认会吃掉它并返回405以表示该操作不被支持。究竟是IIS管线中的哪个步骤吃掉了它,我没有研究明白。不过可以确定的是,问题出在Modulers里。在Web.config文件中,system.webServer下有个modules节点,如果将它的runAllManagedModulesForAllRequests属性设置为True,也可以解决options 405问题。这个属性默认是false,所以本文也不推荐这种方法。

Modules和Handler都是可以编程介入的,这个灵活性为我们提供了解决问题的渠道。具体步骤如下:
(1)在App_Code文件夹下新建一个.cs文件,自定义一个类,并实现IHttpModule接口
(2)在Init方法中,为HttpApplication的BeginRequest事件添加一个自定义过程。
(3)在自定义过程中,拦截请求,判断Request的HttpMethod属性是否是options。如果是,就将响应的状态码设置为200,然后截断后续处理,直接响应请求。
(4)在Web.config文件中添加自定义模块。

以下是自定义模块程序示例:

    public class SpecialMethodModule : IHttpModule
    {
        public SpecialMethodModule() { }
        public void Init(HttpApplication app)
        {
            app.BeginRequest += new EventHandler(this.BeginRequest);
        }
        public void Dispose() { }
        public void BeginRequest(object resource,EventArgs e)
        {
            HttpApplication app = resource as HttpApplication;
            HttpContext context = app.Context;
            if(context.Request.HttpMethod.ToUpper() == "OPTIONS")
            {
                context.Response.StatusCode = 200;
                context.Response.End();
            }
        }
    }
<system.webServer>
  <modules>
    <add name="exampleModule" type="SpecialMethodModuler"/>
  </modules>
</system.webServer>

最后,本文只是提出了一个思路,BeginRequest方法具体在工程中应当如何设计逻辑,一定要认真思考哦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于Web API 2.0中的Options请求返回405的问题 的相关文章

  • axios响应不显示数据

    我正在学习使用 Axios 但输出如图所示 当我使用 fetch 时 输出正常 我该如何修复 Axios const axios require axios default const url https jsonplaceholder t
  • 允许匿名用户浏览样式和图像文件夹

    我正在编写一个 ASP NET Web 应用程序 我有一个登录屏幕 上面有一些 CSS 样式和图像 我遇到了样式和图像未显示的问题 我在网上阅读 它说我需要在 Content 文件夹中放置一个 web config 我将以下内容添加到 we
  • Google BigQuery 与 PHP 集成

    我需要帮助将 google bigquery 代码集成到 PHP 中 所以我可以从 php 代码本身执行查询和其他类型的操作 需要您的帮助并建议我一些工作示例链接 提前致谢 这是一段代码 正确地创建一个Google Client using
  • 使用magento中SOAP API的salesOrderInfo获取简单的产品sku和数量

    我在以下代码中添加了 app code core Mage Sales Model Order Api php File public function info orderIncrementId order Mage getModel s
  • 在 libgdx 中批处理多维数据集时出现问题

    我正在尝试开发一款游戏 在屏幕上渲染多达 300 个立方体 为每个多维数据集创建新的 modelInstance 时 modelBatch 的性能非常糟糕 据我所知 没有 3d 批处理可以将所有立方体批处理到一次绘制调用 所以我拼命地尝试以
  • Skype API 的实现[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的 Skype 插件 https stackoverflow com questions 1149615 skype addon in c sharp 如何在 C 中实现 Skype API 来
  • 仅当 url 以 www 为前缀时才会发生 CORS 错误

    我目前遇到一个关于 CORS 跨源资源共享 的问题 奇怪的是 只有当我使用 www url 前缀时 才会出现这种情况 例如 当我使用以下网址访问我的网站时 http example com index http example com in
  • 用于高级搜索/过滤的.Net Web API URL 约定

    我对 Microsoft 的 REST 和 WebAPI 比较陌生 我们正在实现一个中心 REST 服务 它将容纳多种类型的对象获取和设置 作为该项目的领导者 我的任务是提出我们正在使用的正确的 Uri 设计 我想知道关于战争什么想法更好
  • 有没有 API 可以在两个 iphone/ipod Touch/ipad 之间共享数据? (GameKit 除外)[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有任何框架 API可以轻松找到其他设备并在它们之间共享数据 请不是游戏包 bonjour 会很棒
  • 如何查询所有国家的所有iTunes店面?

    我的 iTunes appID 为 9 位数 当我在美国商店查询 iTunes 时http itunes apple com us app id508611913 http itunes apple com us app id5086119
  • 库和 API 之间还有区别吗?

    每当我询问人们 API 和库之间的区别时 我都会得到不同的意见 有的给这种 http mail python org pipermail tutor 2002 May 014458 html定义 API 是规范 库是实现 有些会告诉你这个类
  • 我们如何在 python 中使用 ms office communicator 客户端公开的 API,这可能吗?

    我想使用 ms office communicator 客户端 api 并且我想在 python 中使用这些 API 可以吗 gt gt gt import win32com client gt gt gt msg win32com cli
  • 如何访问 NFL 的 API?

    我一直在尝试访问或设法访问 NFL com 的数据 但尚未找到 这些网站上有公开文档 https api nfl com docs identity oauth2 index html 但这些文档不会告诉您如何获取客户端 ID 或客户端密钥
  • 在 Hyperledger Composer REST API 上使用 Passport-http

    我想知道是否可以使用passport http来保护由composer rest server生成的Hyperledger Composer的REST API 以及什么是导出 COMPOSER PROVIDERS 配置 这个想法是使用先前生
  • 从 iTunes ID 查找播客源的 URL。 (iTMS API)

    我正在研究一种将 iTunes 播客 ID 转换为播客制作人提供的 RSS 提要的方法 我知道RSS 生成器 http ax itunes apple com rss 可用于生成播客链接的提要 但这些链接指向 HTML 页面 如果您打开 i
  • Sage One API - unsupported_grant_type

    我正在尝试通过以下方式获取 Sage One API 的访问令牌docs https developers sageone com docs en v1 authentication request access token using G
  • 字典 API(词汇)[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有人知道一个好的 NET 字典 API 吗 我对含义不感兴趣 而是我需要能够以多种不同的方式查询单词 返
  • 遭受xss攻击后如何恢复站点?

    最近我正在研究XSS攻击以及它们对网站的破坏性有多大 让我惊讶的是 网络 even SO 充满了关于如何防止xss攻击但没有相关资源说明如何在网站受到 xss 攻击后恢复网站 我遇到过一些事情 比如 将备份网站代码上传回服务器 下载整个网站
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • SoftLayer_Account::getOperatingSystemReloadImages

    我想在 OSReload 期间使用 API 获取可用操作系统列表 我发现提到了 SoftLayer Account getOperatingSystemReloadImages 方法 但找不到该方法的用法 谁能帮我解决这个问题 谢谢 我找不

随机推荐

  • WSL:删除已安装好的Linux 发行版

    如果您从 Windows 11 或 10 上的备份中导入 Linux 发行版 xff0c 您将找不到从 设置 应用 命令提示符或 PowerShell 中卸载它的选项 在这种情况下 xff0c 您需要取消注册分发以将其删除 要在从备份中导入
  • WSL:登陆指定Linux子系统(在安装了多个Linux子系统的情况下)

    To login you need to run wsl d lt Distribution Name gt Step 5 Setup user accounts Notice in the above image that the log
  • Pytorch分布式训练快速入门教程(一):从Accelerate说起

    意在从TopDown的模式 xff0c 从应用出发逐步走向技术的底层 如此不至于在长时间的底层理论学习上花费过多时间 xff0c 而可以快速上手应用 xff0c 同时又不会让底层理论缺席 背景知识 为后续专题做知识储备 xff0c 涵盖数学
  • 大语言模型的涌现能力:现象与解释

    注1 本文整理自我在今年3 月 11 日 中国人工智能学会 主办的 ChatGPT 及大模型专题研讨会 上 大型语言模型的涌现能力 现象与解释 的现场分享 介绍了大语言模型中的涌现现象 以及关于涌现能力背后原因的相关猜想 感谢CSDN帮助整
  • 大模型、知识图谱之间的关系

    作者 AI未来科技 链接 https www zhihu com question 590846667 answer 2954840595 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 nbsp 大模型 如
  • 大模型“涌现”的思维链,究竟是一种什么能力?

    所谓 涌现 在大模型领域指的是当模型突破某个规模时 xff0c 性能显著提升 xff0c 表现出让人惊艳 意想不到的能力 比如语言理解能力 生成能力 逻辑推理能力等 一般来说 xff0c 模型在100亿到1000亿参数区间 xff0c 可能
  • android 使用kotlin 获取设备id

    在 Android 中 xff0c 获取设备的唯一标识符是一项常见的任务 以下是使用 Kotlin 语言获取设备 ID 的步骤 xff1a 1 在 AndroidManifest xml 文件中添加以下权限 xff1a lt uses pe
  • ubuntu apache2 php 中文乱码

    今天在ubuntu 14 下配置apache2 发现解析 php文件的时候中文会出现乱码 xff0c 于是检查了一下 php ini的配置 xff0c 发现 default charset 61 UTF 8 这项没有打开 xff0c 于是把
  • 16-CoreData之多表关联(存储自定义数据模型)

    多表关联 1 1 简介 什么是多表关联 在处理数据库的关系中 xff0c 无非只有三种关系一对一 xff1a 一个老师只能在一个教室上课 xff0c 不可能同时在两个教室上课一对多 xff1a 一个教室可以有多个学生 xff0c 但一个学生
  • Redis的基础

    Redis 文章目录 Redis基础和memcache的区别为什么单线程能有很高的效率具体原因连接过程一次连接流程多个socket xff0c io多路复用程序 xff0c 消息队列 xff0c 文件事件分派器 xff0c 事件处理器 命令
  • python 查询windows的cpu、内存使用率

    coding UTF 8 import os def get info metric metric cmd map 61 34 cpu usage rate 34 34 wmic cpu get loadpercentage 34 34 m
  • 安装GitLab及简单使用

    系统 xff1a CentOS 7 3x64 配置gitlab源 到 etc yum repos d目录下新建gitlab ce repo文件 xff0c gitlab ce name 61 gitlab ce baseurl 61 htt
  • iOS UIBezierPath 通过贝塞尔曲线画圆环 创建一个环形进度指示器

    一 先简单了解一下通过贝塞尔曲线画一个圆的基本概念 xff0c 坐标系请参考下图 要画一个贝塞尔曲线要有几个基本的要素 起始角度 结束角度 半径 是否按照顺时针方向 贝塞尔曲线只是规划了一个Layer的路径 xff0c 而不能真正的展示出来
  • VMware虚拟机安装Ubuntu22.04并配置网络

    一 Ubuntu22 04下载 地址 xff1a https ubuntu com Ubuntu Desktop 包含图形用户界面 Ubuntu Server 不包含图形用户界面 二 VMware安装Ubuntu22 04 三 配置网络 设
  • error RC2108: expected numerical dialog constant

    在我们用图形控件Picture Control在对话框上添加图片是 xff0c 经常会出现error RC2108 expected numerical dialog constant 解决方法 xff1a 双击error rc2018 打
  • uos服务器系统安装PVE

    文章目录 一 PVE介绍 二 系统和组件版本 三 部署pve 1 修改主机名 2 pve安装 3 浏览器访问 一 PVE介绍 Proxmox VE Proxmox Virtual Environment 有方便易用的WEB界面 基于JAVA
  • 通过设置JDK解决存在多个Gradle后台进程的问题

    使用Android Studio经常会在Event Log窗口遇到如下报错 xff1a 简单解释下就是如果后台有一个常驻的gradle守护进程 xff0c 可以提高我们构建效率 因为这样不但可以避免每次都重新启动JVM xff0c 并且可以
  • intellij idea关闭vim模式

    tools gt vim emulator
  • 最大似然估计和最小二乘估计的区别与联系

    看似最小二乘估计与最大似然估计在推导得到的结果很相似 xff0c 但是其前提条件必须引起大家的注意 xff01 xff01 xff01 对于最小二乘估计 xff0c 最合理的参数估计量应该使得模型能最好地拟合样本数据 xff0c 也就是估计
  • 关于Web API 2.0中的Options请求返回405的问题

    关于Web API 2 0中的Options请求返回405的问题 前提 xff1a IIS寄宿的网站 当你向服务器发送非简单请求时 xff0c 客户端会先发送一条预检请求 xff0c 借以确认当前请求源和待请求方法是否被网站允许 xff08