Mollie payment“Unauthorized Request”虽然使用C#点击URL,但它';他在做邮递员
Mollie在Mollie payment“Unauthorized Request”虽然使用C#点击URL,但它';他在做邮递员,c#,asp.net-mvc,mollie,C#,Asp.net Mvc,Mollie,Mollie在中发送请求时付款失败https://api.mollie.com/v2/payments 在System.Net.Http Mollie使用v2/payments的付款请求API通过Postman正常工作,但在c#代码中获得unauthorized请求错误 以下代码 Mollie服务器收到来自的消息 但主要问题是,当点击URL时,Test_api在postman中工作 调用\u httpClient.GetAsync(Uri)在内部创建一个全新的HttpRequestMessag
中发送请求时付款失败https://api.mollie.com/v2/payments
在System.Net.Http
Mollie使用v2/payments的付款请求
API通过Postman
正常工作,但在c#
代码中获得unauthorized
请求错误
以下代码
Mollie服务器收到来自的消息
但主要问题是,当点击URL时,Test_api在postman中工作
调用
\u httpClient.GetAsync(Uri)
在内部创建一个全新的HttpRequestMessage
对象,而不是使用配置了授权:
头的对象
使用
\u httpClient.SendAsync(httpRequest)
来实际使用您的对象。请尝试以下方法:
using(var httpClient = new HttpClient()) {
httpClient.SetBearerToken(tokenValue);
var serData = JsonConvert.SerializeObject(modelData);
var httpRequestContentData = new StringContent(serData, Encoding.UTF8, "application/json");
using(var result = httpClient.PostAsync(url, httpRequestContentData).Result) {
if ((int) result.StatusCode == (int) HttpStatusCode.OK) {
// Go Ahead
}
}
}
关于您的案例,您应该在
\u httpclient
的标题上添加承载人
:
_httpClient.DefaultRequestHeaders.Authorization =new AuthenticationHeaderValue("Bearer", this._apiKey);
现在,由于您将请求主体发送到GET
请求,这是属于HTTP规范灰色区域的一种非常规构造-最终结果是,许多较旧的软件要么根本无法处理此类请求,要么会显式拒绝它,因为他们认为它的格式不正确
.NET Framework不支持这种开箱即用(您将收到一个ProtocolViolationException
)。构建客户端时,您可以安装System.Net.Http.WinHttpHandler
,并使用它而不是默认的HttpClientHandler
:
var handler = new WinHttpHandler();
HttpClient _httpClient = new HttpClient(handler);
//Same code as in question
感谢回复,但收到错误
ProtocolViolationException:无法发送此动词类型的内容正文。
谢谢Nikunj,但收到此消息时使用了上述代码状态代码:401,原因短语:“未经授权的请求”,版本:1.1,内容:System.Net.Http.StreamContent,标题:{X-Content-Type-Options:nosniff严格的传输安全性:最大年龄=31536000;包括子域;预加载日期:周二,2020年1月21日08:53:12 GMT服务器:nginx WWW-Authenticate:Basic realm=“Mollie API-Key”内容长度:209内容类型:application/hal+json
如果我在接收到的消息头中添加令牌。StatusCode:422,ReasonPhrase:“不可处理实体”,版本:1.1,内容:System.Net.Http.StreamContent,头:{X-Content-Type-Options:nosniff严格传输安全性:最大年龄=31536000;包括子域;预加载日期:周二,2020年1月21日09:00:17 GMT服务器:nginx内容长度:213内容类型:应用程序/hal+json}
尝试为\u httpclient
设置授权标头:\u httpclient.DefaultRequestHeaders.authorization=new AuthenticationHeaderValue(“承载人”,this.\u apiKey)
谢谢,我已经做了同样的事情,但是现在正在工作。你可以共享其他东西吗?是的,现在工作了,我也做了同样的事情。你可以共享其他东西吗?谢谢,现在工作了,但是主要的问题是如何发送请求对象?如果我使用sendsync
获取错误ProtocolViolationException:无法发送内容-具有此动词类型的正文。
@jishansiddique执行此操作时会得到什么:\u httpClient.GetAsync(httpRequest.RequestUri.AbsoluteUri).Result;
如果我调用此\httpClient.GetAsync
无法发送请求对象
,那么如果我使用sendsync
获取动词类型
错误,我们将获得200状态代码。@jishansiddique查看注释中链接的最后一个答案
_httpClient.DefaultRequestHeaders.Authorization =new AuthenticationHeaderValue("Bearer", this._apiKey);
var handler = new WinHttpHandler();
HttpClient _httpClient = new HttpClient(handler);
//Same code as in question