动态导航 web 服务错误 401 未经授权

dynamics nav webservice error 401 Unauthorized

使用动态导航 Web 服务时出现以下错误:

The request failed with HTTP status 401: Unauthorized.

但是,当我在浏览器中尝试时,它起作用了。我尝试了以下方法,但仍然无法正常工作:

service.UseDefaultCredentials = true;
service.PreAuthenticate = true;

还有:

service.Credentials = new System.Net.NetworkCredential("XXXXX", "XXXX","XXXX");

我什至尝试使用动态导航访问键,但也没有用。

有什么新建议吗?

有几处可能是错误的。

您是否检查过服务层设置的身份验证类型? 是否有默认公司集(或者您是否在 URL 中选择公司)。 NTLM 是打开还是关闭;这些都是可能会弹出此错误的原因。

我觉得你的代码应该是这样的

service.UseDefaultCredentials = false;
service.Credentials = new System.Net.NetworkCredential("XXXXX", "XXXX","XXXX");

如果您使用 PHP 或 Java 或 XAMARIN,则必须启用 NTLM 设置属性验证 使用 NTLM 身份验证

下面的这段代码对我有用(我并没有真正调整服务层 - 它或多或少具有默认设置):

service.ClientCredentials.Windows.ClientCredential.Domain = <domain>;
service.ClientCredentials.Windows.ClientCredential.UserName = <username>;
service.ClientCredentials.Windows.ClientCredential.Password = <password>;
service.ClientCredentials.Windows.AllowedImpersonationLevel = 
  System.Security.Principal.TokenImpersonationLevel.Delegation;

如果上述方法不起作用,请尝试从 NetworkCredential 中删除 domain - 只需使用您的 用户名密码(如果客户端和服务器在同一个域中,显然)。

我知道这个线程已有 4 年多了,但我想如果有人正在搜索这个问题,他会像我一样遇到这个问题。

当前 NTLM 和 Xamarin 存在问题(在我写这篇文章的时候,问题也存在于 MacOS 上的 .net 核心中)。

查看链接:

iOS: https://github.com/xamarin/xamarin-macios/issues/7770

Android: https://developercommunity.visualstudio.com/content/problem/756697/last-visual-studio-update-brakes-ntlm-authenticati.html

解决方法是使用"MonoWebRequestHandler"。对于 Android 和 iOS 的组合解决方案,请查看我最新的 post here

我希望我可以用这个 post 节省一些时间!