$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,它工作得很好。

$http GET返回完整的HTML源代码

您可以尝试这样做:

//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);
}