关于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的问题 的相关文章

随机推荐

  • 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