如何解决使用C#验证REST API时出错
我正在尝试通过REST API Web服务进行身份验证,并检索承载访问令牌,稍后将用于对特定资源进行请求。我最终要做到的是.NET MVC框架。出于测试目的,我创建了一个示例控制台应用程序,但是该程序只是在运行时退出,并且在line response = await client.Error时出错。PostAsync(“ Token”,requestParams).ConfigureAwait(false); //错误
这是我正在使用的示例。我能够使用邮递员获得访问令牌。
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
namespace test
{
class Program
{
static void Main(string[] args)
{
Program prm = new Program();
prm.InvokeMethod();
}
public async void InvokeMethod()
{
using (var client = new HttpClient())
{
// Setting Base address.
client.BaseAddress = new Uri("https://test.com/api/oauth/token");
// Setting content type.
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// Initialization.
HttpResponseMessage response = new HttpResponseMessage();
List<KeyValuePair<string,string>> allIputParams = new List<KeyValuePair<string,string>>();
allIputParams.Add(new KeyValuePair<string,string>("client_id","ID_dfdhfdjkhfdkfdfjkdfjdkfjd"));
allIputParams.Add(new KeyValuePair<string,string>("client_secret","djfhdskfjhskdjhfksdhjkxcklcfkdjf"));
allIputParams.Add(new KeyValuePair<string,string>("grant_type","client_credentials"));
// Convert Request Params to Key Value Pair.
// URL Request parameters.
HttpContent requestParams = new FormUrlEncodedContent(allIputParams);
// HTTP POST
response = await client.PostAsync("Token",requestParams).ConfigureAwait(false); //ERROR
// Verification
if (response.IsSuccessStatusCode)
{
// Reading Response.
}
}
}
}
}
Update- This worked using RestSharp
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using RestSharp;
using Newtonsoft.Json.Linq;
namespace test
{
class Program
{
static void Main(string[] args)
{
Program prm = new Program();
prm.InvokeMethod();
}
public void InvokeMethod()
{
var client = new RestClient("https://test/api/oauth/token");
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control","no-cache");
request.AddHeader("content-type","application/x-www-form-urlencoded");
request.AddHeader("authorization","Bearer <access_token>");
request.AddParameter("application/x-www-form-urlencoded","grant_type=client_credentials&client_id=fsdfsdfdsf&client_secret=dfdsfsdfds",ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var jObject = JObject.Parse(response.Content);
if (response.IsSuccessful)
{
//Console.WriteLine(response.Content);
// Let us print the variable to see what we got
Console.WriteLine("received from Response " + jObject.GetValue("access_token"));
}
}
}
我能够使用Java成功进行身份验证,但我无法理解是什么导致C#程序出错。是不是因为client_id,client_secret没有在正文中传递?
import java.io.IOException;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class NewClass {
public static void main(String[] args) throws IOException {
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = RequestBody.create(mediaType,"grant_type=client_credentials&client_id=ID_dfdgdfgfdgfgfgf&client_secret=dgfgfdgffgfhghg");
Request request = new Request.Builder()
.url("https://test/api/oauth/token")
.method("POST",body)
.addHeader("Content-Type","application/x-www-form-urlencoded")
.build();
Response response = client.newCall(request).execute();
System.out.println(response);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。