0

ich diesen jquery Aufruf haben:Pass Parameter auf dem Web-api-Controller mit jquery Datenattribut

jQuery.ajax({ 
      type: "POST", 
      url: "http://localhost:5832/api/Login/Post", 
      data: JSON.stringify({ username: 'user12', password: '1234' }), 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (data) { 
       alert(data.d); 
      } 
     }); 

Welche dieser Web-api Controller-Aktion ruft:

[System.Web.Http.AcceptVerbs("POST")] 
[System.Web.Http.HttpPost] 
public HttpResponseMessage Post(string username, string password) 
{ 
    string authenticationToken = ""; 
    authenticationToken = hpl.LoginUser(username, password); 
    //Some other code 

    return Request.CreateResponse(HttpStatusCode.OK, authenticationToken); 
} 

Ich versuche, um die Parameter zu unterbreiten, das Datenattribut, aber der Aufruf wird nicht ausgelöst.

Wenn ich die URL zu ändern: http://localhost:5832/api/Login/Post?username=1&password=2

Ich bin in der Lage, die Controller-Aktion zu erreichen.

Wie kann ich die Parameter als Teil des Datenattributs des JQuery-Aufruf anstelle von Abfragezeichenfolgeparameter übergeben?

viel Dank, Laziale

+0

Verwenden Sie einfach: 'data: {Benutzername:" user12 ", Passwort:" 1234 "},' – Hackerman

Antwort

0

ASP.Net Web-API nicht mehrere Parameter im Inneren des Körpers des Antrags unterstützen.

Sie können nur einen einzigen Parameter senden mit dem FromBody Attribut, so dass anstelle mehrerer Parameter nur ein einzelnes Objekt benutzen, die jede Eigenschaft enthält, die Sie brauchen:

public class LoginModel { 
    public string username { get; set; } 

    public string password { get; set; } 
} 

[System.Web.Http.HttpPost] 
public HttpResponseMessage Post([FromBody] LoginModel loginModel) 
{ 
    string authenticationToken = ""; 
    authenticationToken = hpl.LoginUser(loginModel.username, loginModel.password); 
    //Some other code 

    return Request.CreateResponse(HttpStatusCode.OK, authenticationToken); 
} 

Als beiseite: AcceptVerbs("POST") und HttpPost Attribute sind redundant benutze einen von ihnen, aber nicht beides.