Ajax发布到Web Api(不允许405方法)

时间:2017-03-12 13:09:00

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

在将AngularJS数据发布到Web API端点时出现问题。从我收到的客户端浏览器:

405 (Method Not Allowed)
Response for preflight has invalid HTTP status code 405

我有两个独立的项目,都在localhost中运行。在我的Web Api上,我在config上设置了 EnableCors()

如果我将标题的内容类型设置为:

 'Content-type': 'application/x-www-form-urlencoded; charset=utf-8'

然后它就能够点击我的Web API端点。但是我的对象参数为null。这可能是XML格式而不是JSON吗?我该如何解决这个问题?

客户端代码:

 function signUp(data) {
        $http({
            method: 'POST',
            url: 'http://localhost:15218/api/account/register',
            data: JSON.stringify(data),
            headers: {
                'Content-type': 'application/json'
            }

    }).then(function successCallback(response) {
            console.log(response);
        }, function errorCallback(response) {
            console.log(response);
        });
    }
}

服务器端方法签名:

    [HttpPost]
    [Route("Register")]
    public async Task<HttpResponseMessage> Register(UserCommand command)

2 个答案:

答案 0 :(得分:0)

您可以通过添加global.asax文件

来启用服务上的cors
protected void Application_BeginRequest(object sender, EventArgs e)
{
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
    if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
    {
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, PUT, DELETE");

        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
        HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
        HttpContext.Current.Response.End();
    }
}

答案 1 :(得分:0)

Response for preflight has invalid HTTP status code 405

在发出要发出的POST请求之前,浏览器正在发出请求权限的OPTIONS请求。

服务器在没有200响应的情况下响应OPTIONS请求。错误消息明确告诉您。 (也许Access-Control-Allow-Origin导致问题)

所以在其他任何事情之前,你必须检查请求方法的类型。如果是OPTIONS,则传递200个响应代码。