2016-11-05 3 views
0

Ich bin neu bei Asp.Net, was ich tun möchte ist. Ich habe eine Web-API für den Login-Service, die eine JSON-Daten zurückgibt. Beispiel-URL des Web APiAsp.net MVC Anruf Login Web-Service

http://localhost:55500/api/Login/submit?username=abc&password=abc123 

Es gibt ein JSON-Daten wie

[{"UserID":0, 
    "Status":"True", 
    "Name":"885032-59-6715", 
    "DepName":"Ajay"} 
] 

Wie kann ich meine Login-Seite in Asp.NET MVC authentifiziert. Wenn Login Erfolg (Status: True). Ich sollte zum Dashboard umleiten und die JSON-Daten auf meiner Ansichtsseite anzeigen. Wenn die Anmeldung nicht erfolgreichen, sollte es die Fehlermeldung

Meine ASP.NET MVC-Modell calss Datei:

namespace LoginPracticeApplication.Models{ 
    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; }  
    }} 

Meine ASP.NET MVC-Controller Datei:

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=" + login.password + ""; 
     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; 
     if (responseData=="true") 
     {      
      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(); 
} 

Als ich versuchte, mich mit diesem obigen Code einzuloggen. Es wird immer "Ungültiger Benutzername oder Passwort" angezeigt. Also vielen Dank im Voraus für Ihre Hilfe. Wir freuen uns für den Erfolg

+0

Wie dime2lo unten Sie auf dem Laufenden muß die 'responseData' auf ein Objekt mit' json.net' deserialisieren (oder einer anderen Bibliothek) und dann überprüfen Sie die 'status' Eigenschaft. Außerdem sollten Sie Ihre Abfragezeichenfolgenparameter URL-codieren. – Igor

Antwort

1

Ich glaube, dass das Problem an ist:

  var responseData = responseMessage.Content.ReadAsStringAsync().Result; 
      if (responseData=="true") 
      {      
       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" 
      } 

Wie Sie ReadAsStringAsync() die Antwort sind, wahrscheinlich die JSON zurückgibt, die Sie [{"UserID":0,"Status":"True","Name":"885032-59-6715","DepName":"Ajay"}] erwähnt, was bedeutet, dass der Test responseData=="true" aka. "[{"UserID":0,"Status":"True","Name":"885032-59-6715","DepName":"Ajay"}]" == "true" wird zu false führen.

Sie könnten responseData.Contains("true") verwenden, aber ich glaube nicht, dass dies der beste Ansatz ist.

Ich denke, dass der Weg zu gehen ist, nachdem Sie ReadAsStringAsync() Sie die Zeichenfolge (JSON) in ein Objekt durch JsonConvert.DeserializeObject<LoginResultModel>(responseData); deserialize. Das JsonConvert befindet sich in Newtonsoft.Json, das Sie von Nuget erhalten können. Im LoginResultModel sollten Sie Ihren json berücksichtigen. Ich glaube, es wäre so etwas wie:

public class LoginResultModel 
{ 
    public int UserID { get; set; } 

    public bool Status { get; set; } 

    public string Name { get; set; } 

    public string DepName { get; set; } 
} 

Und wie Sie ein Array kehren Sie zu einer Liste von LoginResultModel deserialisieren sollte: JsonConvert.DeserializeObject<List<LoginResultModel>>(responseData);

PS .: Sie Debug die Daten sehen können, dass response war bekommen und verstehen, warum es falsch bewertet hat.

Grüße

+0

Danke !!!! es funktioniert jetzt gut –

+0

Großartig, du bist willkommen. Wenn es funktioniert, vergessen Sie nicht, die Antwort als die richtige zu überprüfen, damit andere Leute sie als Referenz haben können. Grüße. – dime2lo

Verwandte Themen