2016-06-09 3 views
2

Ich habe einige Probleme mit der Web-API mit der MVC, nicht sicher, was es verursacht, aber es wirft keine Ausnahmen oder Fehler im Debug-Modus, bitte könnte jemand helfen, dieses Problem zu lösen.HttpClient.PostAsJsonAsync funktioniert nicht oder gibt keine Fehler im Debug-Modus

-Code lautet wie folgt:

MVC-Controller ruft:

PortalLogonCheckParams credParams = new PortalLogonCheckParams() {SecurityLogonLogonId = model.UserName, SecurityLogonPassword = model.Password}; 

SecurityLogon secureLogon = new SecurityLogon(); 

var result = secureLogon.checkCredentials(credParams); 

Data Access Object-Methode:

public async Task <IEnumerable<PortalLogon>> checkCredentials(PortalLogonCheckParams credParams) 
{ 
    using (var client = new HttpClient()) 
    { 
     client.BaseAddress = new Uri("http://localhost:50793/"); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     // Check Credentials 

     //Following call fails 

     HttpResponseMessage response = await client.PostAsJsonAsync("api/chkPortalLogin", credParams); 


     if (response.IsSuccessStatusCode) 
     { 
      IEnumerable<PortalLogon> logonList = await response.Content.ReadAsAsync<IEnumerable<PortalLogon>>(); 
      return logonList; 
     } 
     else return null; 
    } 

} 

Web API:

[HttpPost] 
public IHttpActionResult chkPortalLogin([FromBody] PortalLogonCheckParams LogonParams) 
{ 

    List<Mod_chkPortalSecurityLogon> securityLogon = null; 

    String strDBName = ""; 

    //Set the database identifier   
    strDBName = "Mod"; 

    //Retrieve the Logon object 
    using (DataConnection connection = new DataConnection(strDBName)) 
    { 
     //Retrieve the list object 
     securityLogon = new Persistant_Mod_chkPortalSecurityLogon().findBy_Search(connection.Connection, LogonParams.SecurityLogonLogonId, LogonParams.SecurityLogonPassword); 
    } 

    AutoMapper.Mapper.CreateMap<Mod_chkPortalSecurityLogon, PortalLogon>(); 

    IEnumerable<PortalLogon> securityLogonNew = AutoMapper.Mapper.Map<IEnumerable<Mod_chkPortalSecurityLogon>, IEnumerable<PortalLogon>>(securityLogon); 


    return Ok(securityLogonNew); 

} 
+0

Haben Sie versucht, durch Fiddler oder SOAP UI aufrufen, wenn ja, was ist der Antwortcode? – din

+3

Was meinst du mit "nicht funktioniert"? Wo geht es schief? Was erwartest du zu passieren? – DavidG

+0

Entfernen Sie das '[FromBody]' - Attribut aus dem Parameter. – Nkosi

Antwort

1

Sie müssen das [FromBody] Attribut aus dem Parameter eine einfache Art aus dem Anfrag Körper

Using [FromBody]

Um zu erzwingen, Web-API entfernen zu lesen, fügen Sie das [FromBody] Attribut der Parameter:

public HttpResponseMessage Post([FromBody] string name) { ... } 

In diesem Beispiel wird Web API Verwenden Sie einen Medientyp-Formatierer, um den Wert des Namens aus dem Anfragetext zu lesen. Hier ist ein Beispiel Client Anfrage.

POST http://localhost:5076/api/values HTTP/1.1 
User-Agent: Fiddler 
Host: localhost:5076 
Content-Type: application/json 
Content-Length: 7 

"Alice" 

Wenn ein Parameter hat [FromBody], Web-API verwendet den Content-Type-Header einen Formatierer auszuwählen. In diesem Beispiel lautet der Inhaltstyp "application/json" und der Anfragetext ist eine unverarbeitete JSON-Zeichenfolge (kein JSON-Objekt ).

Es darf höchstens ein Parameter aus dem Nachrichtentext gelesen werden.

Verwandte Themen