2015-09-10 42 views
0

我正在嘗試使用$ http向我的服務器發送獲取請求。我有一個WebMethod,看起來像這樣:

[WebMethod] 
[ScriptMethod(UseHttpGet = true, 
ResponseFormat = ResponseFormat.Json, XmlSerializeString = false)] 
public static IList<EmailContentModel> GetEmailContents(int emailTemplateID, int? pageIndex, int? pageSize) 
{ 
    var clientManagementRepository = GetClientManagementRepository(); 
    var emailContents = clientManagementRepository.GetEmailContents(emailTemplateID, pageIndex, pageSize); 
    return emailContents; 
} 

當我使用POST方法(和改變的WebMethod到UseHttpGet = FALSE)以下返回正確的數據。

function getEmailContentDetails(pageIndex) { 
    return $http({ 
    method: "POST", 
    url: "EmailContent.aspx/GetEmailContents", 
    data: JSON.stringify({ emailTemplateID: emailTemplateID, pageIndex: pageIndex, pageSize: pageSize }), 
    headers: { 'Content-Type': "application/json; charset=utf-8" } 
    }).then(onSuccess, onError); 
} 

但是,當我使用GET方法

function getEmailContentDetails(pageIndex) { 
    return $http({ 
    method: "GET", 
    url: "EmailContent.aspx/GetEmailContents", 
    params: { emailTemplateID: 3, pageIndex: 1, pageSize: 10 } 
    headers: { 'Content-Type': "application/json; charset=utf-8" } 
    }).then(onSuccess, onError);  
} 

它屬於過去,在頁面的完整HTML源代碼返回給我,而不是正確的數據。我使用SQL分析器查看,當我使用GET時,數據庫甚至沒有被請求命中。當我使用ajax時,我可以使用GET並且工作正常。

+0

嘗試刪除標題:{'Content-Type':「application/json; charset = utf-8」} – Steve

+0

@Steve仍然沒有好史蒂夫。 – Mathemats

+0

你得到了什麼HTML?錯誤頁面或404頁面? – Steve

回答

0

因此,如果在調用$ http時沒有數據屬性,angular將不會發送'Content-Type'。這就是爲什麼我要回HTML。解決方案是添加一個空的數據屬性。

function getEmailContentDetails(pageIndex) { 
    return $http({ 
    method: "GET", 
    url: "EmailContent.aspx/GetEmailContents", 
    params: bbparams, 
    data: '', <--TAA DAA 
    headers: { 
     'Content-Type': "application/json; charset=utf-8" 
    } 
    }).then(onSuccess, onError); 
} 
1

你可以嘗試這樣的事情:

//add a name for the route: 

[Route("GetEmailContents")] 
public static IEnumerable<EmailContentModel> GetEmailContents(int emailTemplateID, int? pageIndex, int? pageSize) 
{ 
    var clientManagementRepository = GetClientManagementRepository(); 
    var emailContents = clientManagementRepository.GetEmailContents(emailTemplateID, pageIndex, pageSize); 
    return emailContents; 
} 

在您的要求angulars:(警告,你忘了把'周圍的參數的名稱)

function getEmailContentDetails(pageIndex) { 
    return $http({ 
    url: "EmailContent.aspx/GetEmailContents", 
    params: { 'emailTemplateID': 3, 'pageIndex': 1, 'pageSize': 10 } 
    }).then(function(dataResult){ 
     //success 
     // if you use then method you have put .data to catch the result. 
     $scope.result = dataResult.data; 
     console.dir(dataResult.data); 
}, function(error){ 
     //rejected promise 
});  
} 

而且如果你真的把方法得到試試這個:

[HttpGet] 
    public static IEnumerable<EmailContentModel> Get(int emailTemplateID, int? pageIndex, int? pageSize) 
    { 
     var clientManagementRepository = GetClientManagementRepository(); 
     var emailContents = clientManagementRepository.GetEmailContents(emailTemplateID, pageIndex, pageSize); 
     return emailContents; 
    } 

在angularjs:

// Simple Get request example (passing data) : 
$http.get(
     '/someUrl', 
     { 'emailTemplateID': 3, 
      'pageIndex': 1, 
      'pageSize': 10 
     } 
    ).success(function(dataResult){ 
    //your code. 
    }); 

它一定會適合你的代碼,因爲我不知道。 我希望這會對你有用,並讓我知道它是否有效。