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



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 获得响应,这非常奇怪。否则,我只是收到http错误405。

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

检查以下内容:发布 Web API 2 应用程序后解决 HTTP 405 错误

MVC-Web API:不允许使用 405 方法


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

你阿贾克斯调用需要像

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);
    }
});

而你的网络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

最新更新