我构建了一个简单的控制台应用程序来测试与API的连接。从Console App Main调用连接方法可以正常工作。我收到了一个访问令牌的响应。
我虽然我可以为MVC项目实现相同的方法/代码并在HomeController中添加方法,然后从任何ActionResult调用该方法,获取访问令牌然后将其放入ViewBag中以显示它在一个视图中(仅用于测试)。但它在MVC项目中不起作用。
如果我运行调试器,那么当在方法中执行SendAsync时,应用程序似乎会挂起。控制台提供此输出:
Application Insights遥测(未配置):{“name”:“Microsoft.ApplicationInsights.Dev.RemoteDependency”,“time”:“2017-04-08T09:26:32.4945663Z”,“tags”:{“ai。 internal.sdkVersion “:” rddf:2.2.0-738" , “ai.internal.nodeName”: “XXXXXX”, “ai.cloud.roleInstance”: “XXXXXXXX”}, “数据”:{ “基本类型”:” RemoteDependencyData “ ”baseData“:{ ”VER“:2 ”名称为“: ”/标记“, ”ID“: ”XXXXXXXXX =“, ”数据“: ”https://api.vasttrafik.se/token“, ”持续时间“:” 00 :00:00.2810000" , “发送resultCode”: “200”, “成功”:真, “类型”: “HTTP”, “目标”: “api.vasttrafik.se”, “属性”:{ “DeveloperMode”:”真正”}}}} 线程0x1f68已退出,代码为0(0x0)。
如何使API调用/响应在MVC应用程序中起作用? 我在该地区的知识非常低。但我真的想了解这里发生的事情。
谢谢! 最好 Ĵ
MVC项目
public class HomeController : Controller
{
public ActionResult Index()
{
string token = PostRequest().Result;
ViewBag.Token = token;
return View();
}
async static Task<string> PostRequest()
{
var client = new HttpClient();
client.BaseAddress = new Uri("https://api.vasttrafik.se");
var request = new HttpRequestMessage(HttpMethod.Post, "/token");
// Key // Secret
string credentials = "xxxxxxxxxoVS5xDrcO6qZsAp0a" + ":" + "xxxxxxxxhn0STj1w4asDwixdMa";
var plainTextBytes = Encoding.UTF8.GetBytes(credentials);
//Key and secret encoded
string encodedCrentedials = Convert.ToBase64String(plainTextBytes);
//Console.WriteLine(encodedCrentedials);
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", encodedCrentedials);
var formData = new List<KeyValuePair<string, string>>();
formData.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
formData.Add(new KeyValuePair<string, string>("scope", "xxxxxxxxw0oVS5xDrcO6qZsAp0a"));
request.Content = new FormUrlEncodedContent(formData);
// This is where the app hangs....
var response = await client.SendAsync(request);
var mycontentres = await response.Content.ReadAsByteArrayAsync();
var responseBody = Encoding.Default.GetString(mycontentres);
//Console.WriteLine(responseBody);
JavaScriptSerializer seri = new JavaScriptSerializer();
dynamic data = JObject.Parse(responseBody);
string tok = data.access_token;
return tok;
}
}
答案 0 :(得分:0)
public async Task<ActionResult> Index()
{
string token = await PostRequest();
ViewBag.Token = token;
return View();
}