401来自角度节点应用程序的未经授权的ajax调用,调用Web Api 2应用程序

时间:2015-09-23 01:52:58

标签: javascript jquery ajax angularjs asp.net-web-api

当我使用 $ 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错误......

2 个答案:

答案 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