使用jQuery ajax消费授权的asp.net webapi服务

时间:2013-12-23 08:59:38

标签: asp.net-mvc-4 jquery asp.net-web-api

我正在使用手机差距,HTML5和jQuery开发IPAD应用程序。我的webservice是基于带有表单身份验证的ASP.NET WEBAPI构建的。访问api时,身份验证窗口要求输入用户名和密码。提供用户名和密码后,我们可以得到结果。但是在使用jquery ajax消耗相同的服务时,错误抛出了“Unauthorized”消息。任何人都可以帮助解决这个问题。

我访问网址的ScriptBlock

$.ajax({
    type: 'POST',
    url: 'https://myservice.com/api/mypostmethod',
    data: {
        'item': ItemXml,
        'room': RoomXml
        'User_Id': 12313
    },
    success: function (result) {
        ProcessResponse(result);
    },
    error: function (xhr, textStatus, error) {
        console.log("Local To Live - " + xhr.statusText);
        console.log("Local To Live - " + textStatus);
        console.log("Local To Live - " + error);
    }
});

如何拨打此服务?我也试过用jQuery xhr头文件,用过的代码如下

function getAuthorizationHeader(username, password) {
        var authType;

        if (password == "") {
            authType = "Cookie " + $.base64.encode(username);
        }
        else {
            var up = $.base64.encode(username + ":" + password);
            authType = "Basic " + up;
        };
        return authType;
    };



$.ajax({
                type: 'POST',
                url: 'https://myservice/api/mypostmethod',
                data: {
                    'item': '',
                    'room': '',
                    'User_Id': 12313
                },
                beforeSend: function (jqXHR, Settings) {
                    var AuthHeaders = getAuthorizationHeader("username", "password");
                    jqXHR.setRequestHeader("Authorization", AuthHeaders);
                },
                success: function (result) {
                    ProcessSyncResponse(result);
                },
                error: function (xhr, textStatus, error) {
                    alert("Error - StatusCode : "+xhr.status );
                }
            });

请帮助解决这个问题。 感谢。

1 个答案:

答案 0 :(得分:0)

如果您已开始使用表单身份验证,请查看this article以获取有关如何通过AJAX调用使用它的示例。确保您通过HTTPS与服务进行通信,否则您将遇到严重的安全问题。

我认为更好的解决方案是实现某种令牌身份验证,这样您就不会在请求中传递用户名/密码,也不必维护与服务器的某种状态连接。你应该研究一下。