我目前正在开发一个应用程序,以允许我公司的高管在任何地方执行某些操作。我的 Node.js 片段充当 Internet 和我公司内部 LAN 之间的代理,并调用公司 LAN 上的一些 ASP.NET WEB API 服务来处理 Active Directory 身份验证(以便高管可以使用他们的 Windows 登录)以及存储和检索数据来自 SQL Server 2008。
ASP.Net AuthenticateUser() 函数接受包含 userId 和 pas 的 HTTP POST 请求,并返回一个 JSON 对象,其中包含客户端可用于签署请求的哈希值。当我将用户 ID 和密码作为查询参数传递时它工作正常,但是当我尝试将它们嵌入到请求正文中时它会失败。工作版本如下所示。(注意:我省略了错误处理以提高清晰度。)
namespace Approver.Controllers
{
public class UtilityController : ApiController
{
public UserInfo AuthenticateUser(string userId, string password)
{
return UtilityBo.AuthenticateUser(userId, password);
}
}
}
工作的 Node.js 代码(即 Express 中的路由)如下所示。
exports.login = function(req, res){
var userId = req.body.userId;
var password = req.body.password;
var postData = 'userId='+userId+'&password='+password;
});
var options = {
host: res.app.settings['serviceHost'],
port: res.app.settings['servicePort'],
path: '/api/Utility/AuthenticateUser?userId='+userId+'&password='+password,
method: 'POST',
header: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': postData.length
}
};
http.request(options, function(resp){
resp.setEncoding('utf8');
var arr = '';
resp.on('data', function (chunk){
arr += chunk;
});
resp.on('end', function (){
var data = JSON.parse(arr);
res.writeHead(200, {'Content-Type': 'application/json',});
res.end(JSON.stringify(data));
});
}).end(JSON.stringify(postData));
当我将代码更改为仅接受来自帖子正文的数据时,IIS 返回 HTTP 500 错误。新的 WEB API 服务如下所示。
namespace Approver.Controllers
{
public class UtilityController : ApiController
{
public UserInfo AuthenticateUser(UserAuthentication userAuth)
{
return UtilityBo.AuthenticateUser(userAuth);
}
}
}
namespace Approver.Models
{
public class UserAuthentication
{
[Required]
public string UserId { get; set; }
[Required]
public string Password { get; set; }
}
}
新的节点代码只是从 URL 中去除查询参数。
在做了一些测试之后,我意识到 web api 从来没有向模型中插入数据,所以 userAuth 总是有空值。但是,我尝试通过 Chrome 的 REST 控制台发布数据,并且成功了,因此 Node.js 部分必须包含错误。我该如何解决?