0

我正在尝试使用 jQuery ajax 来调用 web api 方法。使用非常基本的方法,我无法让 ajax 调用返回正确的响应。我尝试了多种方法,认为这可能是响应,但没有运气。

这是我的代码:

网络 API

 // POST api/token
 public Token Post(User user)
 {
      throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized));  
 }

jQuery

  $.ajax({
        url: http://myUrl/api/token',
        type: 'POST',
        dataType: 'json',
        data: data,
        success: function () {
        },
        error: function (request, status, error) {
            alert(request.status);
            //request.status is always 0, I am expecting 401
        }
    });

我也尝试过使用:

 .done(function() {
 })
 .fail(function(data) {
     //status code is always 0 instead of expected 401
  });

和:

 statusCode: {
      401: function () {
      //Never gets hit
      },
 }

当我在 FF 中使用 Firebug 检查响应时,我在控制台中收到了正确的响应:

 POST http://myUrl/api/token 401 Unauthorized

因此,状态代码始终为 0 或 401 statusCode: 永远不会被命中。我做错了什么和/或我需要做什么才能正确捕获客户端上的 401 错误?

4

4 回答 4

1

我终于找到了问题所在。$.ajax 不喜欢跨域调用。一旦我将“Access-Control-Allow-Origin: *”添加到我的 REST POST 方法的响应头中,我就能够获得正确的数据。

于 2013-09-09T14:58:24.987 回答
0

尝试这个:

var result = $.ajax({
    url: http://myUrl/api/token',
    type: 'POST',
    dataType: 'json',
    data: data,
    success: function () {
    },
    error: function (request, status, error) {
        alert(request.status);
        //request.status is always 0, I am expecting 401
    }
});

var statusCode = result.status;

或者:

$.ajax({
    url: http://myUrl/api/token',
    type: 'POST',
    dataType: 'json',
    data: data,
    success: function (result) {
        alert(result.status);
    },
    error: function (request, status, error) {
        alert(request.status);
        //request.status is always 0, I am expecting 401
    }
});
于 2013-09-02T22:47:56.577 回答
0

尝试这个:

public Token Post(User user)
{
    Request.CreateResponse(HttpStatusCode.Unauthorized);
}
于 2013-08-31T19:17:45.603 回答
0

尝试这个:

public Token Post([forms body]User user)
{
  throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized));  
 }
于 2013-10-24T09:08:56.087 回答