如何解决使用基本身份验证在.NET中使用NAV oData REST API
正如标题中一样,我试图调用特定的REST API-让我们将其称为 cursed_api -由第三方NAV Server公开,要访问它,我需要提供用户名和密码。
第一点:出于测试目的,我需要使用Internet Explorer来通过Web浏览器访问它,因为在其他浏览器(例如Chrome或Firefox)中,我总是会遇到相同的错误:
{"error":{"code":"Authentication_InvalidCredentials","message":"The server has rejected the client credentials."}}
但这不是真正的问题。在Visual Studio解决方案中,我按书创建了一个oData Connected Service。要下载 $ Metadata ,唯一的预防措施是在标题中添加身份验证信息(授权:基本基本64位凭据)。
然后,我使用自动生成的代码尝试调用 cursed_api API,但我总是收到相同的错误消息:
{"error":{"code":"Authentication_InvalidCredentials","message":"The server has rejected the client credentials."}}
我尝试通过这种方式在请求标头中添加身份验证策略:
static void GetCursedApiList()
{
string serviceRoot = String.Format("{0}/Company('{1}')",endpoint.TrimEnd('/'),company);
NAV.NAV context = new NAV.NAV(new Uri(serviceRoot));
context.SendingRequest2 += SendBaseAuthCredsOnTheRequest;
IEnumerable<CursedApiObject> cursedApiObjects = context.CursedApiObject.Execute();
}
static void SendBaseAuthCredsOnTheRequest(object sender,SendingRequest2EventArgs e)
{
string creds = String.Format(@"{0}\{1}:{2}",domain,username,password);
creds = String.Format(@"{0}:{1}",password);
string base64Creds = Convert.ToBase64String(Encoding.ASCII.GetBytes(creds));
e.RequestMessage.SetHeader("Authorization",String.Format("Basic {0}",base64Creds));
}
然后我尝试使用上下文凭据:
static void GetCursedApiList()
{
string serviceRoot = String.Format("{0}/Company('{1}')",company);
NAV.NAV context = new NAV.NAV(new Uri(serviceRoot));
context.Credentials = new NetworkCredential(username,password,domain);
IEnumerable<CursedApiObject> cursedApiObjects = context.CursedApiObject.Execute();
}
但是我没有运气。
有人遇到过同样的问题吗?
解决方法
很简单,第三方供应商给了我无效的凭据(实际上,这是返回的错误消息)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。