Response status code does not indicate success: 401 (Unauthorized).

简介: 在使用ASP.NET5调用IBM Bluemix上的REST API服务时出现此异常;Response status code does not indicate success: 401 (Unauthorized).

在使用ASP.NET5调用IBM Bluemix上的REST API服务时出现此异常;

Response status code does not indicate success: 401 (Unauthorized).  
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at dotnethelloworld.Controllers.ValuesController.<Get>d__1.MoveNext()

相关代码:

        // GET api/values/txt
        [HttpGet("{txt}")]
        public async Task<string> Get(string txt)
        {
            String retString = txt;
            try
            {
                //构造url,source为要翻译文本的语言,target指定要翻译为什么语言
                String uri = "https://gateway.watsonplatform.net/language-translation/api/v2/translate?";
                uri += "source=en&target=es&text=" + txt;

                System.Net.Http.HttpClientHandler handler = new System.Net.Http.HttpClientHandler();
                NetworkCredential myCred = new NetworkCredential("用户名", "密码", "gateway.watsonplatform.net");
                CredentialCache myCache = new CredentialCache();
                myCache.Add(new Uri(uri), "Basic", myCred);
                handler.Credentials = myCache;
                System.Net.Http.HttpClient httpClient = new System.Net.Http.HttpClient(handler);
                
                retString = await httpClient.GetStringAsync(uri);
                return "{\"text\":\"" + retString + "\"}";
            }
            catch (Exception ex)
            {
                return ex.Message;
                //throw ex;
            }
        }

MSDN中关于NetworkCredential 类的使用示例:

NetworkCredential myCred = new NetworkCredential(
	SecurelyStoredUserName,SecurelyStoredPassword,SecurelyStoredDomain);

CredentialCache myCache = new CredentialCache();

myCache.Add(new Uri("www.contoso.com"), "Basic", myCred);
myCache.Add(new Uri("app.contoso.com"), "Basic", myCred);

WebRequest wr = WebRequest.Create("www.contoso.com");
wr.Credentials = myCache;
只是它是用的WebRequest,而我是用的HttpClient,却不生效,没有找到具体原因;但可以通过另一种方法来解决用户验证的问题。

解决方法:

设置httpClient.DefaultRequestHeaders.Authorization 属性,代码如下:

System.Net.Http.HttpClient httpClient = new System.Net.Http.HttpClient();
//将服务凭证转换为Base64编码格式
byte[] auth = Encoding.UTF8.GetBytes("用户名:密码");
String auth64 = Convert.ToBase64String(auth);
//创建并指定服务凭证,认证方案为Basic
httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", auth64);

retString = await httpClient.GetStringAsync(uri);

目录
相关文章
|
存储 弹性计算 固态存储
阿里云服务器1TB存储收费标准(数据盘/对象存储OSS/文件存储NAS)
阿里云服务器1TB存储多少钱?系统盘最大可选到500GB,数据盘选到1TB价格为3655元一年。也可以选择对象存储OSS和文件存储NAS
8311 2
阿里云服务器1TB存储收费标准(数据盘/对象存储OSS/文件存储NAS)
|
SQL HIVE
Caused by: java.io.IOException: Filesystem closed的处理
org.apache.hadoop.hive.ql.metadata.HiveException: Unable to rename output from: hdfs://nameservice/user/hive/warehouse/om_dw.
3409 0
|
运维 网络安全
解决ssh: connect to host IP port 22: Connection timed out报错(scp传文件指定端口)
通过这些步骤和方法,您可以有效解决“ssh: connect to host IP port 22: Connection timed out”问题,并顺利使用 `scp`命令传输文件。
12001 7
|
弹性计算 Linux 数据安全/隐私保护
在已有的 ECS 上重装幻兽帕鲁服务器、迁移到计算巢、或升级计算巢服务版本
现在你可以参考这篇教程,将原来搭建的幻兽帕鲁服务器迁移到计算巢上,享受计算巢上所支持的界面化调整游戏配置(死亡掉落、服务器密码等)。 或者也可以用于重新安装,升级到最新版本的计算巢幻兽帕鲁服务。
33997 8
|
11月前
|
XML JSON 前端开发
HTTP协议,Content-Type格式介绍篇
通过理解和正确使用Content-Type头字段,可以确保数据在网络上传输时的正确性和高效性,提升网络应用的可靠性和用户体验。
968 25
|
消息中间件 存储 JSON
Net使用EasyNetQ简化与RabbitMQ的交互
EasyNetQ是专为.NET环境设计的RabbitMQ客户端API,简化了与RabbitMQ的交互过程。通过NuGet安装EasyNetQ,可轻松实现消息的发布与订阅,支持多种消息模式及高级特性。文中提供了详细的安装步骤、代码示例及基础知识介绍,帮助开发者快速上手。关注公众号“Net分享”获取更多技术文章。
356 1
Net使用EasyNetQ简化与RabbitMQ的交互
|
自然语言处理 文字识别 数据可视化
文档智能(Document Mind)评测
文档智能(Document Mind)评测
225 4
|
数据库 Python
django中的models.ManyToManyField 字段如何新增,通过Category,如何反向查询Product
django中的models.ManyToManyField 字段如何新增,通过Category,如何反向查询Product
258 10
|
消息中间件 中间件 数据库
NServiceBus:打造企业级服务总线的利器——深度解析这一面向消息中间件如何革新分布式应用开发与提升系统可靠性
【10月更文挑战第9天】NServiceBus 是一个面向消息的中间件,专为构建分布式应用程序设计,特别适用于企业级服务总线(ESB)。它通过消息队列实现服务间的解耦,提高系统的可扩展性和容错性。在 .NET 生态中,NServiceBus 提供了强大的功能,支持多种传输方式如 RabbitMQ 和 Azure Service Bus。通过异步消息传递模式,各组件可以独立运作,即使某部分出现故障也不会影响整体系统。 示例代码展示了如何使用 NServiceBus 发送和接收消息,简化了系统的设计和维护。
265 3
|
人工智能 物联网 API
LLM 大模型学习必知必会系列(十三):基于SWIFT的VLLM推理加速与部署实战
LLM 大模型学习必知必会系列(十三):基于SWIFT的VLLM推理加速与部署实战
LLM 大模型学习必知必会系列(十三):基于SWIFT的VLLM推理加速与部署实战