gpt4 book ai didi

c# - 针对 Web api 方法的奇怪 405 错误

转载 作者:行者123 更新时间:2023-12-03 04:33:43 25 4
gpt4 key购买 nike

所以我真的很苦恼这个问题,并且搜索了互联网并尝试了我能找到的所有可能的建议。

我有一个 web api c# 项目和一个 JS web 项目。在本地运行时一切正常。当我发布到 Azure 时,我可以通过 REST 控制台访问我的 api 方法,一切正常。问题是,当我的网络应用程序尝试执行相同的调用时,每个方法(初始 token 调用除外)都会返回 405。

我已经多次使用 CORS 设置和 web.config,我不确定是否需要什么...这变得非常困惑,但我会尝试将相关部分粘贴到此处。

我的 web.config system.webServer 设置

<modules>
<remove name="FormsAuthentication" />
<remove name="WebDAVModule"/>
</modules>

<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>

<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>

WebApiConfig.cs注册方法

        config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

// Web API routes
config.MapHttpAttributeRoutes();

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

还有一个 API Controller 示例

    [Authorize]
[Route("getall")]
[HttpGet]
public IHttpActionResult GetAll()
{
return Ok(PersonRepository.Get());
}

还有 JS $http.get($rootScope.serviceBase + 'api/person/getall')

总结一下这里的情况:

  • 在本地运行时,调用工作正常
  • 发布到 Azure 后,我可以直接调用其余端点
  • 发布到 Azure 时,我的 JS 返回 405 非描述性错误
  • 如果我从 web.config 中删除 CORS header 并在 Register 方法中使用 enableCors,我什至无法点击/token,而是到处都会出现 CORS 预检错误(尽管我仍然可以从休息控制台成功进行调用)这非常令人困惑

更新

我会在这里记录我正在尝试的事情的运行日志:

  1. 已添加<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />到 webConfig 中的 customHeaders,没有变化

最佳答案

已修复!感谢各种 stackoverflow 帖子的汇编(我喜欢这个网站),我重建了我的 web.config

如果对其他人有用,这是我的新 web.config

<system.web>


<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>

<authentication mode="None" />
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<customErrors mode="Off" />
</system.web>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />
<add name="Access-Control-Allow-Headers" value="Content-Type,Authorization" />
</customHeaders>
</httpProtocol>
<modules runAllManagedModulesForAllRequests="false">
<remove name="WebDAVModule" />
</modules>

<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

</handlers>

</system.webServer>

关于c# - 针对 Web api 方法的奇怪 405 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31754319/

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