$http GET returns 完整 HTML 源
$http GET returns complete HTML source
我正在尝试使用 $http 向我的服务器发送获取请求。我有一个看起来像这样的网络方法:
[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 方法(并将 web 方法更改为 UseHttpGet = false)时,以下 returns 正确的数据。
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);
}
它失败了,returns 完整的 HTML 页面来源给我,而不是正确的数据。我查看了 SQL 分析器,当我使用 GET 时,数据库甚至没有被请求击中。当我使用 ajax 时,我可以使用 GET 并且它工作正常。
因此,如果对 $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);
}
您可以尝试这样的操作:
//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 向我的服务器发送获取请求。我有一个看起来像这样的网络方法:
[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 方法(并将 web 方法更改为 UseHttpGet = false)时,以下 returns 正确的数据。
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);
}
它失败了,returns 完整的 HTML 页面来源给我,而不是正确的数据。我查看了 SQL 分析器,当我使用 GET 时,数据库甚至没有被请求击中。当我使用 ajax 时,我可以使用 GET 并且它工作正常。
因此,如果对 $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);
}
您可以尝试这样的操作:
//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.
});
它肯定适合您的代码,因为我不知道。 我希望这对你有用,如果它有效,请告诉我。