当我使用 $ sce 进行操作时,我能够从 Angular / Node应用程序调用 Web Api 。 IFrame ,但现在我想在应用程序中从jquery ajax调用Web Api。
当我试着打电话时,我得到了
401未经授权
function getComments() {
$.ajax({
url: 'http://localhost:17308/Home/GetNewsComments?id=' + group,
type: 'Get',
data: { id: tipId },
success: function (data) {
$("#commentDetail").empty().append(data);
},
error: function () {
//alert("something seems wrong");
console.log("something is wrong");
}
});
};
FYI / BTW
我已经能够使用
调用IFrame了$scope.setTipId = function (id) {
$scope.detailFrame = $sce.trustAsResourceUrl("http://localhost:17308/Home/GetNewsComments?id=" + id);
我可以为我的控制器的jquery ajax调用做类似的事情吗?
更新
我甚至尝试过“棱角分明的方式”
$http.get('http://localhost:17308/CommentCount/').success(function (data) {
console.log('made it');
})
.error(function () {
console.log('error');
});
我仍然得到401错误......
答案 0 :(得分:1)
调用Web Api控制器并加载iFrame是根本不同的事情。
我怀疑你的控制器方法实际上需要某种授权。使用属性[AllowAnonymous]
装饰Web Api控制器或Controller方法,如下所示。如果这不是一个选项,则问题是您没有有效的ASP.NET会话,或者没有在http调用中添加令牌以进行授权。
[AllowAnonymous] //This allows all methods in the Controller to be accessed anonymously. Both are redundant in this case.
public class CommentCountController : ApiController
{
[HttpGet]
[AllowAnonymous] //This allows this method to be accessed anonymously . Both are redundant in this case.
public int Get()
{
return 1;
}
}
答案 1 :(得分:1)
嗯,这个有点痛苦,但这会奏效。注意:您现在必须使用jsonp进行所有GET调用,不再使用常规的json dataType ...
阅读并遵循此处的说明:
http://www.codeproject.com/Tips/631685/JSONP-in-ASP-NET-Web-API-Quick-Get-Started
接下来,做所有痛苦的Nuget安装,卸载和更新,我记得json格式化器,web api,cors和newtonsoft json之间的冲突有点痛苦。
持久性将得到回报
Jquery致电
$.ajax({
url: 'http://localhost:17308/Home/GetNewsComments?id=' + group,
type: 'Get',
data: { id: tipId },
contentType: 'application/json; charset=utf-8',
dataType: "jsonp",
callback: 'callbackFunc',
success: function (data) {
var json = $.parseJSON(data);
console.log(json);
},
error: function (xhr, status, error) {
console.log(xhr + '\n' + status + '\n' + error);
}
});
function callbackFunc(resultData) {
console.log(resultData);
}
我假设您已经注意并且有Web Api,json格式化程序,CORS,以及其他System.Web.Http更新和其他依赖项。
部分 客户端,但最终与服务器端一起使用 JSONP < / strong>在 web api