2017-02-09 105 views
0

我有一個angularjs中的GET方法,它從C#中的API控制器接收數據。控制器正在返回數據,$ 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中沒有包含任何值。

任何人都可以闡明爲什麼我的數據沒有被正確傳輸嗎?

+0

裏面有什麼數據?你嘗試過'data.data'嗎? –

+0

'data'包含大小爲1的對象數組和空對象 –

+0

您是否調試過您的控制器並確保confirmData實際上具有值? –

回答

1

事實證明,我的PageModel類變量需要聲明爲公共,以便從控制器傳遞數據。

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

嘗試返回JSON而不是HttpResponseMessage

[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; 
    } 
} 

在客戶端數據應該放在響應data財產。你的情況應該是:

data.data

但請儘量這一翻譯success功能使用then功能:

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

即使你能避免JsonResult和使用string。將您的模型序列化爲JSON字符串並返回字符串。

+0

。 –

+0

@KevinK。試着用'then'代替'sucess'。 – 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); 

,然後分別定義回調函數。