2016-11-29 28 views
0

は実際に私が2のWeb APIサービスを持って、両方のJSONデータWeb APIを使用したAsp.Net MVC Webアプリケーション?

のWeb APIサービス1返す:システムにログインするために使用します。システムは、ステータスが "True"の場合にユーザーがログインできるようにする必要があります。そうでない場合は、ユーザーがシステムにログインできないようにすべきです。 Web APIサービスのJson結果1:[{"UserID": "1"、 "ステータス": "True"、 "Name": "ABC"、 "Department": "IT"}]

Iサービスに正常にログインすることができます。システムへのログイン後、私はWeb API 2を使用します:

Web APIサービス2:ユーザーに関するデータを返します。ウェブAPIサービス2の JSON結果:[{ "ユーザID": "1"、 "タスク完了": "20"、 "タスク保留": "10"}]

ログインモデル: [ API 1]

public class Login 
{ 
    [Required(ErrorMessage = "Username is required")] // make the field required 
    [Display(Name = "username")] // Set the display name of the field 
    public string username { get; set; } 
    [Required(ErrorMessage = "Password is required")] 
    [Display(Name = "password")] 
    public string password { get; set; } 

    public string getname(string username) //This method check the user existence 
    { 
     string name = ""; 
     //string connString= 
     // Read the connection string from the web.config file 

     using (SqlConnection conn = new SqlConnection("Conn Details")) 
     { 

      conn.Open(); 
      // Calling scramble.NET dll to encode password 
      ScrambleNET.clScramble encrpt = new clScramble(); 
      string encrptedPassword = encrpt.EncryptText(password); 
      string sql = "Execute splSystemLogin '" + username + "','" + encrptedPassword + "'"; 
      SqlDataAdapter adp = new SqlDataAdapter(sql, conn); 
      DataSet ds = new DataSet(); 
      adp.Fill(ds); 
      if (ds != null && ds.Tables[0].Rows.Count > 0) 
      { 
       name = ds.Tables[0].Rows[0]["Name"].ToString(); 
      } 
      else 
      { 
       name = ""; 

      } 


     } 
     return name; 


    } 

} 

コントローラー: [API 1]

public ActionResult Index(Login login) 
    { 
     if (ModelState.IsValid) // Check the model state for any validation errors 
     { 

      string uname = ""; 
      uname = login.username; 
      string pword = ""; 
      pword = login.password; 

      string url = "http://localhost:55506/api/Login/submit?username=" + uname + "&password=" + pword + ""; 
      System.Net.Http.HttpClient client = new System.Net.Http.HttpClient(); 
      client.BaseAddress = new Uri(url); 
      client.DefaultRequestHeaders.Accept.Clear(); 
      client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); 
      HttpResponseMessage responseMessage = client.GetAsync(url).Result; 

      var responseData = responseMessage.Content.ReadAsStringAsync().Result; 
      JsonConvert.DeserializeObject<List<LoginResult>>(responseData); 
      if (responseData.Contains("True")) 
      { 


       string name = ""; 
       Clinicnameinfo = login.getname(login.username); 
       TempData["Name"] = Clinicnameinfo; 
       ViewData["Name"] = Clinicnameinfo; 



       return View("Show", login); // Return the "Show.cshtml" view if user is valid 
      } 
      else 
      { 
       ViewBag.Message = "Invalid Username or Password"; 
       return View(); //return the same view with message "Invalid Username or Password" 
      } 

     } 
     else 
     { 
      return View(); 

     } 
     return View(); 

    } 

今私がシステムにログインすることができます。しかし、私は2番目のAPIからデータを取得するために立ち往生しました。

は、どのように私は、タスクの詳細を表示するには、ログイン後ウェブAPI 1ウェブAPI 2を比較することができますか?

ありがとうございます!!!成功した解決策を探すために探しています

+0

Web API 1とWeb API 2のログイン方法を貼り付けてください。問題を理解するのに役立ちます。 –

+0

あなたの参照のために私のコードを追加しました@ J-Mean –

答えて

0

非同期メソッド呼び出しを使用しているときに非同期を使用しようとします。 プロセスが完了するまで待つことを意味し、完了後にコードの残りが実行されます。

コードでは、asyncメソッドがclient.GetAsync(url)および.Content.ReadAsStringAsync()によって2回呼び出されます。

はあなたのコード修正: -

コントローラ:[API 1]

public async Task<ActionResult> Index(Login login) 
    { 
     if (ModelState.IsValid) // Check the model state for any validation errors 
     { 

      string uname = ""; 
      uname = login.username; 
      string pword = ""; 
      pword = login.password; 

      string url = "http://localhost:55506/api/Login/submit?username=" + uname + "&password=" + pword + ""; 
      System.Net.Http.HttpClient client = new System.Net.Http.HttpClient(); 
      client.BaseAddress = new Uri(url); 
      client.DefaultRequestHeaders.Accept.Clear(); 
      client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); 
      HttpResponseMessage responseMessage = await client.GetAsync(url); 

      var responseData = await responseMessage.Content.ReadAsStringAsync(); 
      JsonConvert.DeserializeObject<List<LoginResult>>(responseData); 
      if (responseData.Contains("True")) 
      { 


       string name = ""; 
       Clinicnameinfo = login.getname(login.username); 
       TempData["Name"] = Clinicnameinfo; 
       ViewData["Name"] = Clinicnameinfo; 



       return View("Show", login); // Return the "Show.cshtml" view if user is valid 
      } 
      else 
      { 
       ViewBag.Message = "Invalid Username or Password"; 
       return View(); //return the same view with message "Invalid Username or Password" 
      } 

     } 
     else 
     { 
      return View(); 

     } 
     return View(); 

    } 

を上記の希望はあなたの問題を解決します。

+0

上記のコードは私のためにうまくいきます。私は2番目のAPI URLを使用しませんでした。私はそれぞれ2つのURLを持っています。 URL 1:文字列url = "http:// localhost:55506/api/Login/submit?username =" + uname + "&password =" + pword + ""; URL 2:文字列DashBoardUrl = "http:// localhost:55506/api/ClinicDashBoardInfo/submit?username =" + uname + "&password =" + pword + "";両方のURLがjson結果を返すと、** UserId **というフィールドがあります。ログインに使用された最初のURL ..ダッシュボードの内容を取得するために使用される2番目のURL。では、ログイン後にダッシュボードの内容を取得するにはどうすればよいですか(両方のURL一致のUserIdがある場合のみ) –

+0

asyncを追加するのを忘れてダッシュボード情報を取得するのを待っている場合と同様です。これが修正されない場合は、ダッシュボード情報も取得するコードを貼り付けてください。 –

+0

ありがとう、それはうまく動作します –

関連する問題