2013-08-31 48 views
0

我正在嘗試使用jQuery ajax來調用Web API方法。使用非常基本的方法,我無法獲得ajax調用來返回正確的響應。我已經嘗試了多種方式,認爲它可能是迴應,但沒有運氣。Web API和jQuery ajax沒有收到正確的錯誤

這裏是我的代碼:

的Web 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錯誤?

回答

0

試試這個:

public Token Post(User user) 
{ 
    Request.CreateResponse(HttpStatusCode.Unauthorized); 
} 
+0

感謝您的答覆。試過這個,但它沒有奏效。客戶端看到狀態碼0仍然是同樣的問題。 – tclarkston

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

感謝您的幫助,但我試了兩次,仍然沒有運氣。我仍然得到狀態代碼0. – tclarkston

1

我終於發現了問題。 $ .ajax不喜歡跨域調用。一旦我將「Access-Control-Allow-Origin:*」添加到我的REST POST方法的響應標題中,我就可以獲得正確的數據。

+0

Thanx爲您的提示。我已經添加了一個示例代碼,所以其他人可以使用它 – chamara

0

試試這個:

public Token Post([forms body]User user) 
{ 
    throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized)); 
} 
相關問題