2017-01-22 6 views
1

私は、SQL ServerではなくWeb APIからデータを取得しているAnjularJs 2のasp net core 1.0.1プロジェクトを持っています。私は別の記事をgoogleで行ったが、私は正常にMVC 5で同じ呼び出しを行うことができるかどうかは、asp.netコアアプリケーションからAPIを取得、投稿、削除し、APIを削除する最善の方法を得ていないasp net coreの以下のコードに相当するものをガイドしてください。MVC 6.0とasp netコアアプリケーションのサードパーティの残りのAPIからデータを取得する方法

public static HttpWebResponse Get(string requestUrl, Dictionary<string, string> headers, string contentType, string acceptType) 
{ 
    //Create http Request 
    HttpWebRequest httprequest = WebRequest.Create(requestUrl) as HttpWebRequest; 

    //Add all headers. 
    httprequest.ContentType = contentType; 
    httprequest.Accept = acceptType; 
    httprequest.UserAgent = System.Web.HttpContext.Current.Request.UserAgent.ToString(); 
    foreach (var header in headers) 
     httprequest.Headers.Add(header.Key, header.Value); 
    httprequest.Method = GET; 

    //Get response 
    HttpWebResponse response = httprequest.GetResponse() as HttpWebResponse; 
    return response; 
} 

答えて

2

あなたはかなり接近していた:注意すべき

public static async Task<HttpWebResponse> Get(string requestUrl, Dictionary<string, string> headers, string contentType, string acceptType, string userAgent) 
{ 
    //Create http Request 
    HttpWebRequest httprequest = WebRequest.Create(requestUrl) as HttpWebRequest; 
    //Add all headers. 
    httprequest.ContentType = contentType; 
    httprequest.Accept = acceptType; 
    httprequest.Headers[HttpRequestHeader.UserAgent] = userAgent; 
    foreach (var header in headers) 
    { 
     httprequest.Headers[header.Key] = header.Value; 
    } 

    httprequest.Method = "GET"; 
    //Get response 
    HttpWebResponse response = await httprequest.GetResponseAsync() as HttpWebResponse; 
    return response; 
} 

もの:.NETのコアにGetResponse()のない同期バージョンはありませんので

  1. 方法は非同期でなければなりません。これは、Getメソッドの結果でawaitが今すぐできるように、このメソッドを非同期に呼び出すコントローラアクションを作成する必要があることを意味します。
  2. HttpContext.Currentはありません。 userAgentがパラメータとして渡されます。お使いのコントローラの中にあなたはこのようにそれを取得することができます:string userAgent = this.Request.Headers["User-Agent"];

また、あなたがそれを使用して終了した後、適切にHttpWebResponseインスタンスを配置することが非常に重要であることを覚えておいてください。私のプロジェクト構造は以下のコントローラ=>サービス=> project1HttpWebRequester => project1HttpClientようですが解決策のための

using (var response = await Get(...)) 
{ 
    ... 
} 
+0

ありがとう:あなたはusing文で、このメソッドへの呼び出しをラップしていることを確認します。私はproject1HttpClientにUserAgentが必要です。そうすれば、私はUserAgentをform1HttpClientのフォームコントローラに渡す必要がありますか?次に、非同期関数を使用したくない場合は可能ですか? –

+0

はい、アプリケーションのすべてのレイヤーでユーザーエージェントを渡す必要があります。また、非同期バージョンが必要ない場合は、HTTP応答で '.GetAwaiter()。GetResult()'を呼び出すことでリクエストが完了するまでメインスレッドをブロックすることができますが、個人的にはそうしないことをお勧めします。 .NETコアでは、非同期は事柄を行う慣習的なやり方であり、それに応じてAPIを適合させる必要があることに慣れておく必要があります。 –

関連する問題