gpt4 book ai didi

asp.net - 微软.AspNet.WebApi.Cors : The requested resource does not support http method 'OPTIONS'

转载 作者:行者123 更新时间:2023-12-02 10:25:04 24 4
gpt4 key购买 nike

我发现这个问题似乎经常出现。我已经仔细研究了每一个并尝试了许多建议的解决方案。一种解决方案似乎确实让我进入了“工作”状态,但它似乎并没有解决实际的根本问题,而是以某种方式解决了它。那么,让我解释一下我的场景以及我所尝试的内容。

我正在编写一个由 IIS 提供服务的 AspNet WebApi 应用程序。我的应用程序当前使用基于约定的路由,而不是属性路由。我的应用程序需要处理 CORS 飞行前请求(选项)。我已经从 Nuget 安装了所需的 Microsoft.AspNet.WebApi.Cors 包。以下是我正在使用的 AspNet 软件包的版本:

<package id="Microsoft.AspNet.Cors" version="5.2.4" targetFramework="net461" />
<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net461" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.4" targetFramework="net461" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.4" targetFramework="net461" />
<package id="Microsoft.AspNet.WebApi.Cors" version="5.2.4" targetFramework="net461" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net461" />

根据我的阅读,Microsoft.AspNet.WebApi.Cors 包应该添加对处理 CORS 飞行前请求的支持。这意味着我不必添加手动 OPTIONS 操作方法等 - nuget 包为我带来了这些。因此,我根据常见引用的博客文章配置了该包,以便为所有可用 Controller 启用 CORS。据我了解,这应该是我的应用程序开始响应 OPTIONS 请求所需的全部内容。为了完整起见,下面是我的配置 - 它表明我还配置了一些其他内容:

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
var jsonMapping = new RequestHeaderMapping("Accept", "text/html", System.StringComparison.OrdinalIgnoreCase, true, "application/json");
var corsAttribute = new EnableCorsAttribute("*", "*", "*");

config.Formatters.JsonFormatter.MediaTypeMappings.Add(jsonMapping);

config.Services.Replace(typeof(IFilterProvider), new UnityFilterProvider(UnityConfig.Container));

config.EnableCors(corsAttribute);

config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}

最后,我看到了 web.config 中有关 OPTIONSVerbHandler 的一些项目的引用。我的保留为默认值,如下所示......

  <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>
</system.webServer>

最后,所有这些项目都就位后,我的应用程序似乎仍然无法处理 OPTIONS 请求。使用 postman ,我只需向我的任何端点发送 OPTIONS 请求,无论端点是什么,我都会收到以下 405 响应...

Allow →POST
Cache-Control →no-cache
Content-Length →76
Content-Type →application/json; charset=utf-8
Date →Wed, 14 Feb 2018 20:50:14 GMT
Expires →-1
Pragma →no-cache
Server →Microsoft-IIS/10.0
X-AspNet-Version →4.0.30319
X-Powered-By →ASP.NET
X-SourceFiles →=?UTF-8?B?QzpcVXNlcnNccmNvbGVcRG9jdW1lbnRzXFZpc3VhbCBTdHVkaW8gMjAxN1xQcm9qZWN0c1xQb3J0YWwuUkVTVFxQb3J0YWwuUkVTVFxhY2NvdW50XGF1dGhlbnRpY2F0ZQ==?=

{"Message":"The requested resource does not support http method 'OPTIONS'."}

以下是我尝试解决此问题的一些方法:

  1. 我尝试从 web.config 中删除 OPTIONSVerbHandler,但这似乎没有任何变化。
  2. 我尝试显式地将 EnableCorsAttribute 放在各个操作方法和 Controller 上,但这似乎没有任何变化。
  3. 我明确地将 HttpOptionsAttribute 放在操作方法上,这似乎解决了问题。但这似乎是不正确的方法,因为该属性是说操作方法用于处理 OPTIONS 请求,这根本不是我想要的。我认为 Microsoft.AspNet.WebApi.Cors 包带来了自己的 OPTIONS 处理程序。
  4. 我尝试切换到基于属性的路由,而不是原来的基于约定的路由。似乎没有改变任何事情。

有人知道是什么原因导致这个问题吗?我的 Microsoft.AspNet.WebApi.Cors 包似乎没有正确连接,或者没有做任何事情。响应中没有 CORS header 。尽管我在配置中启用了它,但看起来 AspNet 并不认为它有任何 OPTIONS 处理程序。

最佳答案

我在其他几个地方看到过这个问题。大多数答案都集中在 web.config hack、自定义过滤器属性、其他自定义代码等作为解决方案。我想标记我的场景中最终的解决方案,我相信这也是许多其他人的场景......

Microsoft.AspNet.WebApi.Cors包确实可以工作并处理OPTIONS飞行前的请求。不过,只有当存在适当的 CORS header 时,它才会生效。

因此,在我的场景中,我使用 Postman 等工具对此进行测试。我通过发送显式 OPTIONS 进行测试要求。好吧,其中许多工具不会发送 CORS 飞行前请求,即使如此,在发送手动 OPTIONS 时也是如此。请求它们不包含触发 Microsoft.AspNet.WebApi.Cors 所需的 CORS header 功能。

所以,最终,对我来说,没有技术问题或错误,只是缺乏关于 nuget 包如何工作的知识。当我切换回 JavaScript 项目并使用 fetch 跨源发出请求时,请求有效。 Chrome 发送预检 OPTIONS ,带有适当的 CORS header 。

因此,如果您使用 Postman 等工具,请确保使用适当的 CORS header 进行测试!

关于asp.net - 微软.AspNet.WebApi.Cors : The requested resource does not support http method 'OPTIONS' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48833617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com