【问题标题】:Getting error 405 (Method Not Allowed) while calling POST WEBAPI from AngularJS $http?从 AngularJS $http 调用 POST WEBAPI 时出现错误 405(不允许方法)?
【发布时间】:2023-04-07 11:13:02
【问题描述】:

我有 WEBAPI 项目和 AngularJS 客户端项目。 $http.get 调用工作正常,并且带有空数据的 $http.post 调用也正常工作,但数据抛出错误“405(不允许方法)”。我也启用了 CORS。请提供解决方案。

我在 web.config 中添加了以下内容

 <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
     <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />

      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS,XYZ" 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,XYZ" 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="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>



<httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Headers" value="Content-Type" />
      <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    </customHeaders>
 </httpProtocol>

这是 WEBAPI

[HttpPost] public bool SubmitQuesiton(JObject 数据) { 返回 Factory.SubmitQuestion(data); }

这是 AngularJS 代码

data = JSON.stringify(data);
        $http({
            method: 'POST',
            url: "http://localhost:53546/api/demo/SubmitQuesiton",
            headers: {
                'Content-Type': 'application/json',
                'Accept': 'application/json'
            },
            data: data
        })

【问题讨论】:

  • 请上网查看。这个问题有几十个答案取决于asp.net-web-api
  • @lin 尝试了几个小时的所有搜索,但无法解决
  • 所以不要在你的问题中添加你现在尝试过的东西。
  • 是否允许您的 Web API 针对 HTTP POST 进行调用?
  • @Speedy 请添加您迄今为止尝试过的内容。我真的认为您现在没有尝试过网络中提供的解决方案。

标签: angularjs post asp.net-web-api


【解决方案1】:

回答自己的问题。问题是由于 CORS,它应该在 WEBAPI 项目中启用。 CORS 启用无法通过 WEB.config 代码进行,您需要通过后端启用 CORS。

注意 - 如果 web.config 中存在所有 web.config CORS 启用代码,即以下代码,请删除它

<httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Headers" value="Content-Type" />
      <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    </customHeaders>
 </httpProtocol>

步骤 1.安装CORS包Install-Package Microsoft.AspNet.WebApi.Cors for WEBAPI项目 2.在WebApiConfig.cs中添加这段代码

var corsAttribute = new EnableCorsAttribute("*","Origin, Content-Type, Accept",
                                               "GET, PUT, POST, DELETE, OPTIONS");
            config.EnableCors(corsAttribute);

完成。

【讨论】:

    猜你喜欢
    • 2016-12-03
    • 2017-10-16
    • 2016-05-15
    • 2014-05-21
    • 2021-09-21
    • 2018-12-20
    • 2018-02-16
    • 1970-01-01
    • 2021-07-28
    相关资源
    最近更新 更多