我是Ionic和有角度的新手。我正在使用angular.js构建带有离子框架的样本。我想通过$ http post方法调用WebApi。我检查了这个(ionic-proxy-example)解决方案,我正在尝试使用我的api实现相同的解决方案。当我在我的示例项目中调用上面示例中提供的api时,我得到了记录,但它不能与我的api一起使用。它会引发500内部错误。
这是我的app.js
angular.module('myApp', ['myApp.controllers', 'myApp.services'])
.constant('ApiEndpoint', {url: 'http://localhost:8100/api'})
Services.js
angular.module('myApp.services', [])
.factory('Api', function($http, $q, ApiEndpoint) {
console.log('ApiEndpoint', ApiEndpoint)
var getApiData = function() {
var q = $q.defer();
var data = {
Gameweek_ID: '179',
Vender_ID: '1',
Language:'en'
};
var config = {
headers : {
"Content-Type": "application/json; charset = utf-8;"
}
};
$http.post(ApiEndpoint.url, data, config)
.success(function (data, status, headers, config) {
// $scope.PostDataResponse = data;
alert('success');
console.debug("response :" + data);
q.resolve(data);
})
.error(function (data, status, header, config) {
// $scope.ResponseDetails = "Data: " + data +
alert('error');
console.debug("error :" + data);
q.reject(data);
});
return q.promise;
}
return {getApiData: getApiData};
})
controllers.js
angular.module('myApp.controllers', [])
.controller('Hello', function($scope, Api) {
$scope.employees = null;
Api.getApiData()
.then(function(result)
{console.log("result is here");
jsonresponse = result.data;
$scope.employees = jsonresponse;}
)
});
和Ionic.Project文件
{
"name": "Multilingual",
"app_id": "4b076e44",
"proxies": [
{
"path": "/api",
"proxyUrl": ""
}
]}
我试图理解这个问题并检查了多个方法来调用api。令人惊讶的是,它适用于没有任何CORS错误的ajax post调用。当我使用Angular时,我试图通过$ http post完成此操作。我觉得这是一个小问题,但我无法搞清楚。将不胜感激的解决方案。谢谢。
答案 0 :(得分:2)
你已经将内容类型设置为json,因此服务器期望一个json字符串,但是当你通过一个对象发送错误时,它没有收到格式正确的json字符串。
您<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="@*|node()" mode="#all">
<xsl:copy>
<xsl:apply-templates select="@*|node()" mode="#current"/>
</xsl:copy>
</xsl:template>
<xsl:template match="letter">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:variable name="letter-with-line-breaks">
<xsl:apply-templates select="." mode="breaks"/>
</xsl:variable>
<xsl:for-each-group select="$letter-with-line-breaks/letter/node()" group-starting-with="br">
<p>
<xsl:apply-templates select="current-group()[not(self::br)]"/>
</p>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
<xsl:template match="letter//text()" mode="breaks">
<xsl:analyze-string select="." regex=" ">
<xsl:matching-substring>
<br/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
</xsl:transform>
将其更改为$http.post(ApiEndpoint.url, data, config)
。
如果不起作用,请将您的内容类型更改为$http.post(ApiEndpoint.url, JSON.stringify(data), config)
并将此行application/x-www-form-urlencoded
更新为$http.post(ApiEndpoint.url, data, config)
,不要忘记注入$http.post(ApiEndpoint.url, $httpParamSerializer(data), config)
功能。
答案 1 :(得分:0)
问题是您发送了一个包含$http.post
请求的POST而非$http.get
答案 2 :(得分:0)
尝试如下 -
$http({
url: ApiEndpoint.url,
method: "POST",
data: data,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).Success(..rest code goes here..)
在WebAPI中,当我们在POST方法中传递多个对象时,我们得到500个内部错误,因此我们在这种情况下使用ViewModel(谈论asp.net MVC)。