使用Javascript发布到Web服务(来自C)
大家好,, 我面临一个小问题 直到上周,我们的移动应用程序连接到一个内部Web Api,该Api又连接到我们合作伙伴运行和维护的Web服务。 问题是,我们希望删除作为中间人的Web Api,并直接从Cordova应用程序Javascript连接到Restful服务 下面是我正在尝试模拟的C代码,如果您有任何帮助,我们将不胜感激: 在这一点上,我确信一切都是正确的,除了身份验证,但我可能是错的 问题: 如果可能的话,我如何在Javascript中实现这一点使用Javascript发布到Web服务(来自C),javascript,c#,cordova,Javascript,C#,Cordova,大家好,, 我面临一个小问题 直到上周,我们的移动应用程序连接到一个内部Web Api,该Api又连接到我们合作伙伴运行和维护的Web服务。 问题是,我们希望删除作为中间人的Web Api,并直接从Cordova应用程序Javascript连接到Restful服务 下面是我正在尝试模拟的C代码,如果您有任何帮助,我们将不胜感激: 在这一点上,我确信一切都是正确的,除了身份验证,但我可能是错的 问题: 如果可能的话,我如何在Javascript中实现这一点 public static Authen
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服务,人们只能使用基本身份验证。我希望有人能在这方面有更多的经验。我没有这方面的经验,只有基于令牌的身份验证或直接成员身份提供商身份验证。您是否可以联系您的供应商或您试图认证的供应商?看起来这两条消息与您的示例中的相同。你能从两个系统都收到信息吗?你可以用这个。