2017-02-09 4 views
0

私はC#のAPIコントローラからデータを受け取るangularjsのGETメソッドを持っています。コントローラがデータを返していて、$ http getメソッドが応答を受信して​​いますが、応答コンテンツの本文が空です。

マイHTTPGET APIコントローラ機能:私は返すようにしたい

[HttpGet] 
[Route("api/LandingPage/GetByDate")] 
public HttpResponseMessage GetByDate(DateTime startDate, DateTime endDate) 
{ 
    try 
    { 
     var startDateParam = new SqlParameter("@startDate", startDate); 
     var endDateParam = new SqlParameter("@endDate", endDate); 

     var confirmData = m_databaseObject.Database.SqlQuery<PageModel>("[dbo].[GetPageData] @startDate,@endDate", startDateParam, endDateParam).ToList(); 

     return Request.CreateResponse(HttpStatusCode.OK, confirmData); 
    } 
    catch (Exception e) 
    { 
     return Request.CreateErrorResponse(HttpStatusCode.NotFound, $"Error occured {e.Message} {startDate:yyyy-MM-dd} {endDate:yyyy-MM-dd}"); 
    } 
} 

オブジェクト:

public class PageModel 
{ 
    string Name { get; set; } 
    int? FirstTotal { get; set; } 
    int? FisrtInitial { get; set; } 
    int? FisrtApproval { get; set; } 
    int? SecondTotal { get; set; } 
    int? SecondInitial { get; set; } 
    int? SecondApproval { get; set; } 
    int? Validated { get; set; } 
    int? NotSettled { get; set; } 
} 

GETメソッド:

this.getLandingPage = function ($scope) { 
    $scope.error = ""; 
    $scope.message = ""; 
    return $http({ 
     method: "GET", 
     url: apiName + "LandingPage/GetByDate?startDate=" + $scope.StartDate + "&endDate=" + $scope.EndDate, 
     headers: { 'Content-Type': 'application/json' } 
    }).success(function (data) { 
     if (data.length === 0) 
      $scope.message = "No Data found"; 
     else { 
      $scope.LandingPageData = data; 
     } 
    }).error(function (error) { 
     $scope.LandingPageData = null; 
     if (error) 
      $scope.error = error.Message; 
     else 
      $scope.error = "Data services may not be running, Please check!"; 
    }) 
} 

私のコントローラで私のconfirmData変数は、データが含まれています関数が返るとき。私のangularjs GETメソッドは、data.lengthを1にして成功を返しますが、dataに含まれる値はありません。

私のデータが正しく転送されない理由を誰かが知ることができますか?応答dataプロパティに配置されなければならない

[HttpGet] 
[Route("api/LandingPage/GetByDate")] 
public JsonResult GetByDate(DateTime startDate, DateTime endDate) 
{ 
    try 
    { 
     var startDateParam = new SqlParameter("@startDate", startDate); 
     var endDateParam = new SqlParameter("@endDate", endDate); 

     var confirmData = m_databaseObject.Database.SqlQuery<PageModel>("[dbo].[GetPageData] @startDate,@endDate", startDateParam, endDateParam).ToList(); 

     return new JsonResult() { Data = confirmData , JsonRequestBehavior = JsonRequestBehavior.AllowGet }; 
    } 
    catch (Exception e) 
    { 
     throw; 
    } 
} 

クライアント上のデータ側:

+0

内のデータは何ですか?あなたは 'data.data'を試しましたか? –

+0

'data'に空のオブジェクトを持つサイズ1のオブジェクト配列が含まれています –

+0

コントローラをデバッグしてconfirmDataが実際に値を持つことを確認しましたか? –

答えて

1

私のPageModelクラス変数は、コントローラからデータを渡すためにpublicとして宣言する必要があることが判明しました。これにPageModelクラスを変更

が働いた:

public class PageModel 
{ 
    public string Name { get; set; } 
    public int? FirstTotal { get; set; } 
    public int? FisrtInitial { get; set; } 
    public int? FisrtApproval { get; set; } 
    public int? SecondTotal { get; set; } 
    public int? SecondInitial { get; set; } 
    public int? SecondApproval { get; set; } 
    public int? Validated { get; set; } 
    public int? NotSettled { get; set; } 
} 
0

HttpResponseMessage代わりにJSONを返すようにしてください。

data.data

しかしintead success機能then機能を使用してみてください:あなたのケースではそれがあるべき

.then(function (data) { 
     var result = data.data; 
    }); 

でもあなたがJsonResultを回避しstringを使用することができます。モデルをJSON文字列にシリアル化して文字列を返します。

+0

を返すときに 'PageModel'オブジェクトにデータが含まれています。私はJsonResultを使ってみましたが、私は同じ問題を抱えています。 @KevinK。 –

+0

'sucess'の代わりに' then'を使ってみてください。 – kat1330

0

一般に、データはdataプロパティの下にネストされます。

.success(function (resp) { 
    if (resp.data.length === 0) 
     $scope.message = "No Data found"; 
    else { 
     $scope.LandingPageData = resp.data; 
    } 
}) 
+0

これを試してみると、 'resp.data'は未定義です。 –

+0

ネットワークコンソールの応答として何が表示されますか? –

+0

レスポンスコードが200でレスポンスボディが '[{}]' –

0

どの角度の角度を使用していますか? 1.6 .successから廃止されました:

そして、あなたはContent-Typeヘッダを設定している理由は、特定の理由は?

return $http.get(url: apiName + "LandingPage/GetByDate?startDate=" + $scope.StartDate + "&endDate=" + $scope.EndDate,).then(successCallback, errorCallback); 

次に、コールバック関数を別々に定義してください。

関連する問題