简体   繁体   English

从AngularJS $ http调用POST WEBAPI时出现错误405(不允许使用方法)?

[英]Getting error 405 (Method Not Allowed) while calling POST WEBAPI from AngularJS $http?

I have WEBAPI project and AngularJS client side project. 我有WEBAPI项目和AngularJS客户端项目。 $http.get calls are working fine and also $http.post calls with null data are working but with data its throwing error '405 (Method Not Allowed)'.I have enabled CORS too. $ http.get调用工作正常,具有空数据的$ http.post调用也可以正常工作,但数据抛出错误''405(Method Not Allowed)''。我也启用了CORS。 Please provide solution. 请提供解决方案。

I have added following things in web.config 我在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>

This is the WEBAPI 这是WEBAPI

[HttpPost] public bool SubmitQuesiton(JObject data) { return Factory.SubmitQuestion(data); [HttpPost]公共布尔SubmitQuesiton(JObject data){return Factory.SubmitQuestion(data); } }

This is AngularJS code 这是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
        })

Answering own question. 回答自己的问题。 Issue is due CORS, it should be enabled in WEBAPI project. 问题是由于CORS引起的,应该在WEBAPI项目中启用它。 The CORS enabling not works through WEB.config code, you need to enable CORS through backend. 无法通过WEB.config代码启用CORS,您需要通过后端启用CORS。

Note - remove all web.config CORS enabling code if its there in web.config ie the below code 注意-如果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>

Steps 1. Install CORS package Install-Package Microsoft.AspNet.WebApi.Cors for WEBAPI project 2. In WebApiConfig.cs add this code 步骤1.安装WES API的CORS软件包Install-Package Microsoft.AspNet.WebApi.Cors。2.在WebApiConfig.cs中添加以下代码

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

Done. 做完了

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM