ASP.Net:CORS错误:无法加载资源:服务器响应状态为405(方法不允许)

时间:2016-04-17 20:27:25

标签: asp.net ajax cors

即使我在我的控制器中启用了CORS,但是我收到了这个错误。 无法加载资源:服务器响应状态为405(方法不允许)

我试图通过ajax调用将表单数据发布到控制器。

    var data = $.param({
        emailId: $scope.txtEmailAddr,
        passwd: $scope.txtPswd
    });
    var config = {
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;'
        }
    }

$http.post('../api/login/1', data)
        .success(function (data, status, headers, config) {
            alert("Success" + data);
            $state.go('app.dashboard.v2');

        })
        .error(function (data, status, header, config) {
            alert("Error");

        });

这是在浏览器上输入的网址: 的 http://localhost:27622/template_content_angularjs/index.html#/member/login/v2 此页面有一个提交按钮,单击它时,它调用ajax调用并在内部尝试调用控制器api。这给出了上述错误。

当我通过浏览器调用我的控制器时,它会成功运行并返回如下数据: 控制器网址通过浏览器进行调用: http://localhost:27622/api/login/1

控制器返回的数据。

    <Login xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/kindergarten.template_content_angularjs.Models">
<Password>Adnan@123</Password>
<UserName>Adnan1</UserName>
<id>1</id>
</Login>

这是控制器代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using kindergarten.template_content_angularjs.Models;

using System.Web.Http.Cors;

namespace kindergarten.template_content_angularjs.controllers
{
    [EnableCors(origins: " http://localhost:27622", headers: "*", methods: "*")]
    public class LoginController : ApiController
    {
        Login[] ArrLogin = new Login[]
     {
            new Login { id=1, UserName = "Adnan1", Password = "Adnan@123" },
            new Login { id=2, UserName = "Adnan2", Password = "Adnan@123" },
            new Login { id=3, UserName = "Adnan3", Password = "Adnan@123" }
      };

        public IEnumerable<Login> GetAllLogins()
        {
            return ArrLogin;
        }

        public IHttpActionResult GetLogin(int id)
        {
            var product = ArrLogin.FirstOrDefault((p) => p.id == id);
            if (product == null)
            {
                return NotFound();
            }
            return Ok(product);
        }
    }
}

我已阅读过CORS,但仍然无法理解,虽然我在同一台服务器上调用,但我得到了上面提到的错误。我也在控制器中启用了CORS。

1 个答案:

答案 0 :(得分:1)

嗯@Musa虽然说ajax请求是POST方法的正确的事情。问题出在我的控制器上,我没有处理POST方法。 解决方案是

public string Post([FromBody] string value)
{
    return value;
}

处理post方法。控制器上没有用于处理POST方法的API。它只处理Get方法。

对不起,请大家帮忙。希望这能帮助像我这样的其他新手。