使用Javascript发布到Web服务(来自C)

使用Javascript发布到Web服务(来自C),javascript,c#,cordova,Javascript,C#,Cordova,大家好,, 我面临一个小问题 直到上周,我们的移动应用程序连接到一个内部Web Api,该Api又连接到我们合作伙伴运行和维护的Web服务。 问题是,我们希望删除作为中间人的Web Api,并直接从Cordova应用程序Javascript连接到Restful服务 下面是我正在尝试模拟的C代码,如果您有任何帮助,我们将不胜感激: 在这一点上,我确信一切都是正确的,除了身份验证,但我可能是错的 问题: 如果可能的话,我如何在Javascript中实现这一点 public static Authen

大家好,, 我面临一个小问题

直到上周,我们的移动应用程序连接到一个内部Web Api,该Api又连接到我们合作伙伴运行和维护的Web服务。 问题是,我们希望删除作为中间人的Web Api,并直接从Cordova应用程序Javascript连接到Restful服务

下面是我正在尝试模拟的C代码,如果您有任何帮助,我们将不胜感激: 在这一点上,我确信一切都是正确的,除了身份验证,但我可能是错的

问题: 如果可能的话,我如何在Javascript中实现这一点

public static AuthenticateResult CheckLogin(LoginModel login)
        {
            var serviceClient = new WebClient();
            var proxy = serviceClient.Proxy;
            proxy.Credentials = new NetworkCredential("username_goes_here", "password_goes_here");
            serviceClient.Headers["Content-type"] = "application/json";

            try
            {
                var requestHeader = new UnauthenticatedRequestHeader
                {
                    Code = ConstantModel.PartnerCode,
                    Partner = ConstantModel.PartnerName
                };

                var authenticateRequest = new AuthenticateRequest
                {
                    Username = login.Username,
                    Password = login.Password,
                    Handset = "iPhone Emulator"
                };

                var serviceRequest = new
                {
                    header = requestHeader,
                    request = authenticateRequest
                };

                var jsonizedServiceRequest = JsonConvert.SerializeObject(serviceRequest);
                var requestBytes = Encoding.UTF8.GetBytes(jsonizedServiceRequest);
                var requestStream = new MemoryStream(requestBytes);

                var ms = requestStream.ToArray();

                var responseBytes = serviceClient.UploadData("Url_goes_here", "POST", ms);
                var jsonizedServiceResponse = Encoding.UTF8.GetString(responseBytes);
                var authResult = JsonConvert.DeserializeObject<AuthenticateResponse>(jsonizedServiceResponse);

                return authResult.AuthenticateResult;
            }
            catch (Exception ex)
            {
                return null;
            }
        }
到目前为止,我在Javascript中看到的是返回一个错误的请求错误:

btnTestClick: function () {
                    var header = {
                        Code: 'guid_goes_here',
                        Partner: 'partnerid_goes_here'
                    };
                    var request = {
                        Username: 'username_goes_here',
                        Password: 'password_goes_here',
                        Handset: 'iPhone Emulator'
                    };
                    var myrequest = {
                        header: header,
                        request: request
                    };

                    var string = JSON.stringify(myrequest);
                    var data = tobytearray(string);

                    $.ajax({
                        type: "POST",
                        url: "url_goes_here",
                        crossDomain: true,
                        data: data,
                        contentType: 'application/octet-stream;',
                        dataType: "json",
                        username: 'auth_username_goes_here',
                        password: 'auth_password_goes_here',
                        processData: false,
                        success: function (result) {
                            debugger;
                        },
                        error: function (jqXHR, textStatus, errorThrown) {
                            alert("error");
                        },
                        beforeSend: function (xhr) {
                        },
                    });

                    function tobytearray(str) {
                        var bytes = [];
                        for (var i = 0; i < str.length; ++i) {
                            bytes.push(str.charCodeAt(i));
                        }
                        return bytes;
                    }
                }

我从您的示例中看到的是两个示例中使用的数据类型的差异。 在C示例中,您使用serviceClient.Headers[Content type]=application/json;在javascript实现中,您使用contentType:“application/octet stream;”。 八位字节流应该用于附件,而不是JSON对象

Web服务可能正在验证内容类型上的请求,如果测试结果是您的请求无效,它可以返回,并且应该返回HTTP 400错误请求


我不知道您将请求发送到哪里的Web服务以及它执行什么验证,但请尝试将javascript实现中的contenttype更改为contenttype:“application/json;”

…什么是错误的?我在上面指定,我希望在Javascript中模拟此C代码您的输出/响应是什么?在on error函数中,我收到以下消息:readyState:4,status:400,errorMessage:Bad RequestHi,感谢您的回复,我已尝试发送内容类型JSON以达到相同的效果,我还收到一个错误的请求。我想这可能和身份验证有关,因为我读过多篇文章,指出从Javascript到Web服务,人们只能使用基本身份验证。我希望有人能在这方面有更多的经验。我没有这方面的经验,只有基于令牌的身份验证或直接成员身份提供商身份验证。您是否可以联系您的供应商或您试图认证的供应商?看起来这两条消息与您的示例中的相同。你能从两个系统都收到信息吗?你可以用这个。