HTTP CODE 405(不允许的方法),当我在 ASP.NET WebAPI CORS 中发送 POST 数据时

Posted

技术标签:

【中文标题】HTTP CODE 405(不允许的方法),当我在 ASP.NET WebAPI CORS 中发送 POST 数据时【英文标题】:HTTP CODE 405 (Method Not Allowed), When I sent POST data in ASP.NET WebAPI CORS 【发布时间】:2016-09-27 19:51:06 【问题描述】:

Web.config

 <httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" />
  </customHeaders>
</httpProtocol>
<handlers>
  <remove name="WebDAV"/>
  <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>

控制器

  [EnableCors(origins: "http://domain/api/Clients", headers: "*", methods: "*")]
public class ClientsController : ApiController

    private ParaNewnergyEntities db = new ParaNewnergyEntities();

    // GET: api/Clients
    public IEnumerable<Client> GetClient()
    
        return db.Client.ToList();
    
    [HttpPost]
    public IHttpActionResult PostClient(String Username, String Password)
    
        Client c = new Client
        
            Username = Username,
            Password = Password
        ;

        db.Client.Add(c);
        db.SaveChanges();
        return Ok(c);
    

WebApiConfig.cs

     public static void Register(HttpConfiguration config)
    
        config.MapHttpAttributeRoutes();
        config.EnableCors();

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

    

阿贾克斯

   var sendData=
            Username:"gx",
            Password:"gx"
        ;
        $.ajax(
            url: "http://domain/api/Clients",
            type: "POST",
            data: sendData,
            success: function (d) 
                $("#msg").html(d);
                console.log(d);
            
        );

浏览器错误:

  POST http://domain/api/Clients 405 (Method Not Allowed)

我可以通过GET方法获取API。很奇怪,我可以通过 POST 方法从 API 获得响应,而无需 Any Parameter。否则,我只会收到 http 错误 405。

此外,我也从 DELETE 和 PUT 方法收到 http 错误 405。只有 GET 和 Option 返回 httpcode 200。

【问题讨论】:

我现在使用了一个参数。 http 代码现在是 415 我已经解决了这个问题。我的问题是: 1.在APIController中,如果我想传递多个参数,我应该把它们放在一个参数中,就像Pranay所说的那样。它让我得到了 405。 2. 我的模型属性有一些问题。这就是我的代码得到 500 的原因。 【参考方案1】:

检查这个:Troubleshooting HTTP 405 Errors after Publishing Web API 2 Applications

MVC-Web API: 405 method not allowed


您将数据传递给您的方法的方式存在问题,因为您正在尝试传递多个参数,您应该尝试如下

你的ajax调用需要像

var client = 
    Username:"gx",
    Password:"gx"

$.ajax(

    url: "http://domain/api/Clients",
    type: "POST",
    contentType: "application/json",
    data: JSON.stringify(client),
    success: function (result) 
        alert(result);
    
);

你的web api方法会是这样的

[HttpPost]
    public IHttpActionResult PostClient(Client client)
    
        db.Client.Add(client);
        db.SaveChanges();
        return Ok(client);
    

也可以在这里查看帖子:http://weblog.west-wind.com/posts/2012/May/08/Passing-multiple-POST-parameters-to-Web-API-Controller-Methods

【讨论】:

您好,感谢您的回答。我已经在下面尝试了您的答案。但是,我收到错误 500: @GaoxinHuang - 看看这个:asp.net/web-api/overview/testing-and-debugging/… @GaoxinHuang - 也检查这个回复***.com/questions/23293782/… 我已经阅读并尝试了以上两个链接。这是行不通的。对不起。我的 httpcode 是 415 使用一个参数后

以上是关于HTTP CODE 405(不允许的方法),当我在 ASP.NET WebAPI CORS 中发送 POST 数据时的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS:$http.get 405(不允许的方法)

YII 2,不允许的方法 (#405)

“无法在已发布的 Web API 上发布数据” – 405(不允许的方法)

HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET 并且请求的资源不允许指定的 HTTP 方法

405 - 不允许用于访问此页面的 HTTP 动词

Spring Security:身份验证导致 HTTP 405“方法不允许”