APIへの接続をテストするための簡単なコンソールアプリケーションを構築した。 Console App Mainから接続メソッドを呼び出すと正常に動作します。私はアクセストークンで応答します。APIへのSendAsync後にMVCアプリが停止する - 同じコードがコンソールアプリケーションで正常に動作するが、
私は、MVCプロジェクトに同じメソッド/コードを実装し、HomeController内にメソッドを追加してから、ActionResultからメソッドを呼び出し、アクセストークンを取得してから、ViewBagに入れます(テストのためだけに)ビューで表示します。しかし、MVCプロジェクトでは動作しません。
デバッガを実行すると、メソッドでSendAsyncが実行されたときにアプリケーションがハングアップするようです。コンソールには次の出力があります。
アプリケーションInsightsテレメトリ(未構成):{"name": "Microsoft.ApplicationInsights.Dev.RemoteDependency"、 "time": "2017-04-08T09:26:32.4945663Z"タグ ":{" ai.internal.sdkVersion ":" rddf:2.2.0-738 "、" ai.internal.nodeName ":" XXXXXX "、" ai.cloud.roleInstance ":" XXXXXXXX "}、" data " : ""、 "データ": "https://api.vasttrafik.se/token"、 "持続時間":{"baseType": "RemoteDependencyData"、 "baseData":{"ver":2、 "name": "/ token"、 "id": "XXXXXXXXX = : "00:00:00.2810000"、 "resultCode": "200"、 "success":true、 "type": "Http"、 "target": "api.vasttrafik.se"、 "properties":{"DeveloperMode ":" true "}}}} スレッド0x1f68がコード0(0x0)で終了しました。
MVCアプリケーションでAPI呼び出し/応答を行うにはどうすればよいですか? 私の知識は非常に低いです。しかし、私は本当にここで何が起こっているのか理解したい。
ありがとうございます! ベスト J
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;
}
}
I ")は、公共の文字列PostRequest(" ただ、非同期にならない方法を変更することで、これを "解決" 。 これは悪い解決策ですか?この種の行為のためにはasyncはもっと良いでしょうか? – jeth0010