服务器中的 C# webapi Cors Option 请求返回错误 404 未找到

Posted

技术标签:

【中文标题】服务器中的 C# webapi Cors Option 请求返回错误 404 未找到【英文标题】:C# webapi Cors Option request in server returns error 404 not found 【发布时间】:2021-06-26 06:27:06 【问题描述】:

我正面临选项预检请求显示 404 未找到的 cors 问题。在我的本地环境中对此进行了测试,我的设置完全正常。但是当我尝试在实际的 IIS 服务器中实现此功能时,选项预检请求显示 404 未找到。我的 api 是作为 web api 项目创建的。

我曾尝试按照其他帖子中的建议设置预检请求处理程序,但它仍然无法正常工作。 是否有任何特定原因使其仅在本地有效?

此部分显示选项请求:

一般的 请求网址:http://api.domain.cc/api/Login 请求方法:选项 状态码:404 未找到 远程地址:192.168.10.5:80 推荐人政策:strict-origin-when-cross-origin 响应标头: HTTP/1.1 404 未找到 内容类型:文本/html X-Powered-By: ASP.NET 服务器:域 日期:格林威治标准时间 2021 年 3 月 30 日星期二 07:54:34 内容长度:1245 请求标头: 选项 /api/登录 HTTP/1.1 主机:api.domain.cc 连接:保持活动 Pragma:无缓存 缓存控制:无缓存 接受: */* 访问控制请求方法:POST 访问控制请求标头:授权,内容类型 来源:http://site.domain.cc 用户代理:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Sec-Fetch-Mode: cors 参考:http://site.domain.cc/ 接受编码:gzip,放气 接受语言:en-US,en;q=0.9,zh-TW;q=0.8,zh;q=0.7,zh-CN;q=0.6

我的 web.config 设置如下:

<system.webServer>
      <handlers>
          <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
          <remove name="OPTIONSVerbHandler" />
          <remove name="TRACEVerbHandler" />
          <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
      </handlers>
    <validation validateIntegratedModeConfiguration="false" />
    <modules>
      <remove name="ApplicationInsightsWebTracking" />
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" />
    </modules>    
  </system.webServer>

我的 web api 配置如下:

公共静态无效寄存器(HttpConfiguration 配置) // Web API 配置和服务 EnableCorsAttribute cors = 新的 EnableCorsAttribute( 来源:“http://site.domain.cc”, 标题:“*”, 方法:“获取、发布、删除、放置、选项”) SupportsCredentials = true ; config.EnableCors(cors); // Web API 路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( 名称:“默认API”, routeTemplate: "api/controller/id", 默认值:新 id = RouteParameter.Optional );

【问题讨论】:

请以文本而非图像的形式编码。像往常一样:我们无法调试图像。 谢谢提醒,刚改回code 供您参考:***.com/questions/25553855/… 我已经尝试了该帖子中的两种解决方案,但它仍然不适合我。尝试使用 iisreset 为我的 api 站点在 ISAPI 过滤器中设置选项动词,并为选项请求添加路由,但两者都不起作用。 【参考方案1】:

我设法解决了我的问题。我在这里做了两件事。

    允许在 UrlScan 中使用“OPTIONS”动词,如本文404 for web.api cors OPTIONS 中所述 确保将应用程序池配置为“集成”模式。

我的 api 仍然为选项请求返回错误 404 的原因是因为我的应用程序池之前设置为“经典”模式。

【讨论】:

【参考方案2】:

您能否通过将 Web 配置中允许的来源设置为“*”来首先测试您的 api 控制器

如果这也返回 404 not found 那么其他问题是问题而不是 CORS。

【讨论】:

刚刚测试,即使来源是“*”也返回404 not found,可能是因为我从子域请求? 你可以尝试使用 HTTP 方法 GET 而不是 OPTION 看看你是否仍然得到 404? 谢谢@Filip,我刚刚发现了这个问题,这是因为 UrlScan 设置和我的应用程序池设置。我会将我的发现作为答案发布

以上是关于服务器中的 C# webapi Cors Option 请求返回错误 404 未找到的主要内容,如果未能解决你的问题,请参考以下文章

React js 中的 CORS 问题

cors c# web API react

XMLHttpRequest 错误 - Flutter Web 中的 CORS 问题(C#)

在 C# WebAPI 中,如何配置 CORS 以允许带有凭据和 json 内容的 POST 请求?

Azure 移动服务 Web Api 上的 SignalR CORS

CORS 问题 Angular4 & c# web api