$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.
    });

它肯定适合您的代码,因为我不知道。 我希望这对你有用,如果它有效,请告诉我。