2016-05-01 6 views
5

私は単純なAngularJS $ httpブロックを持っています。

$http(req).then(function successCallback(response) { 
    alert(response); 
}, function errorCallback(response) { 
    alert(response); 
}); 

私の問題は、私のASP.NETコントローラがHTTPエラーコードを返すと、JS errorCallbackが次のようなオブジェクトを受け取ることです。

{data: "", status: 304, config: Object, statusText: "Not Modified"} 

私が何をしても、私のコールバックにデータプロパティを設定することはできません。

代わりに私のコントローラがHTTP OKコードを返した場合は、「成功」コールバックが呼び出され、戻りデータが利用可能になります。しかし、それがエラーのときではない...助け!

コントローラ機能はWebAPI POSTハンドラであり、次のようになります。

[System.Web.Http.HttpPost] 
public async Task<HttpResponseMessage> Save([FromBody]object data) 
{ 
    ...<snip>... 

    return new HttpResponseMessage 
    { 
     StatusCode = HttpStatusCode.NotModified, 
     Content = new JsonContent(JObject.FromObject(new 
     { 
      success = false, 
      message = "User not authorised to perform this action." 
     })) 
    }; 
} 

と同じ構造ですが、

StatusCode = HttpStatusCode.OK 

JSのコールバックで正常に受信されました。

+0

これはコードの入力ミスですか? 'データ'対 '応答'? –

+0

@EvanTrimboli:はい、修正されました。 –

+0

エラーが発生したときに 'data'に何が入ると思いますか? @Rob; – Rob

答えて

2

私の質問のコメントを確認した後、問題は自分の選択したHTTPステータスコードに起因することが判明しました。私は戻ってきました

このコードは特別な意味を持ち、「データ」ブロブは意図的に取り除かれたようです。私は

StatusCode = HttpStatusCode.Unauthorized, 

ようなコードを使用する場合、コールバック角度で期待どおり

代わりに、「データ」ブロブが移入されています。

このサンプルは予想されるエラーデータを返します。

[System.Web.Http.HttpPost] 
public async Task<HttpResponseMessage> Save([FromBody]object data) 
{ 
    ...<snip>... 

    return new HttpResponseMessage 
    { 
     StatusCode = HttpStatusCode.Unauthorized, 
     Content = new JsonContent(JObject.FromObject(new 
     { 
      success = false, 
      message = "User not authorised to perform this action." 
     })) 
    }; 
} 
関連する問題