微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用基本身份验证在.NET中使用NAV oData REST API

如何解决使用基本身份验证在.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 举报,一经查实,本站将立刻删除。