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



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

我试着按照其他帖子的建议设置飞行前请求处理程序,但它仍然不起作用。它只在本地工作有什么具体的原因吗?

本节显示选项请求:

概述请求URL:http://api.domain.cc/api/Login请求方法:OPTIONS状态代码:404未找到远程地址:192.168.10.5:80推荐人政策:交叉来源时严格来源响应标头:HTTP/1.1 404未找到内容类型:text.htmlX-Powered-Bor:ASP。NET服务器:域日期:2021年3月30日星期二07:54:34 GMT内容长度:1245请求标头:OPTIONS/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,类似Gecko(Chrome/89.0438.90 Safari/537.36秒获取模式:cors参考人:http://site.domain.cc/接受编码:gzip,deflate接受语言: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配置如下:

public static void Register(HttpConfiguration config({//Web API配置和服务EnableCorsAttribute cors=新的EnableCorsAAttribute(起源:"http://site.domain.cc",headers:"*",方法:"GET、POST、DELETE、PUT、OPTIONS"({SupportsCredentials=true};配置。EnableCors(cors(;//Web API路由配置。MapHttpAttributeRoutes((;配置。路线。MapHttpRoute(名称:"DefaultApi",routeTemplate:"api/{controller}/{id}",默认值:new{id=RouteParameter.可选});}

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

  1. 允许UrlScan中的'OPTIONS'动词如本文404中所述,用于web.api cors OPTIONS
  2. 确保应用程序池配置为"集成"模式

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

您可以通过在web配置中将允许的起源设置为"来首先测试您的api控制器吗*">

如果这也返回404未找到,那么问题出在其他方面,而不是CORS。

最新更新