$http GET返回完整的HTML源代码
本文关键字:HTML 源代码 http GET 返回 | 更新日期: 2023-09-27 18:11:57
我试图使用$http发送get请求到我的服务器。我有一个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时,DB甚至没有被请求击中。当我使用ajax时,我可以使用GET,它工作得很好。
您可以尝试这样做:
//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;
}
在你的请求角中:(警告,你忘了在参数名周围加上' ')
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
});
}
如果你真的用了get方法试试这个:
[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.
});
它肯定适合你的代码,因为我不知道。我希望这将是有用的,让我知道它是否有效。
所以,如果在调用$http时没有data属性,angular就不会发送'Content-Type'。这就是为什么我得到HTML。解决方案是添加一个空的data属性。
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);
}