Comment appeler correctement la méthode ASP .NET MVC WebAPI 2

J’ai créé un projet séparé pour ASP .NET MVC WebAPI 2 et j’aimerais appeler la méthode Register . (J’utilise un projet créé par VS2013 par défaut.)

 [Authorize] [RoutePrefix("api/Account")] public class AccountController : ApiController { .... // POST api/Account/Register [AllowAnonymous] [Route("Register")] public async Task Register(RegisterBindingModel model) { if (!ModelState.IsValid) { return BadRequest(ModelState); } IdentityUser user = new IdentityUser { UserName = model.UserName }; IdentityResult result = await UserManager.CreateAsync(user, model.Password); IHttpActionResult errorResult = GetErrorResult(result); if (errorResult != null) { return errorResult; } return Ok(); } 

J’utilise une application WPF simple pour faire cela. Je ne suis pas sûr de la syntaxe pour appeler cette méthode et lui transmettre le nom d’utilisateur et le mot de passe en raison de RegisterBindingModel

  public partial class MainWindow : Window { HttpClient client; public MainWindow() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { Test(); } private async void Test() { try { var handler = new HttpClientHandler(); handler.UseDefaultCredentials = true; handler.PreAuthenticate = true; handler.ClientCertificateOptions = ClientCertificateOption.Automatic; handler.Credentials = new NetworkCredential("test01","test01"); client = new HttpClient(handler); client.BaseAddress = new Uri("http://localhost:22678/"); client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json")); // It tells the server to send data in JSON format. var response = await client.GetAsync("api/Register"); response.EnsureSuccessStatusCode(); // Throw on error code. // How to pass RegisterBindingModel ??? var data = await response.Content.ReadAsAsync(); } catch (Newtonsoft.Json.JsonException jEx) { MessageBox.Show(jEx.Message); } catch (HttpRequestException ex) { MessageBox.Show(ex.Message); } finally { } } 

Un indice?

Cela dépend du routage de votre service API Web mais semble avoir oublié le nom du contrôleur dans la route.

Par défaut, il devrait être

 api/Account/Register 

Ou votre code

 client.BaseAddress = new Uri("http://localhost:22678/"); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var response = await client.PostAsync("api/Account/Register", ...body content...); 

Et en passant, HTTP Verb devrait être POST et non GET et vous devriez mettre quelque chose dans le corps.

Vous pouvez passer par body en utilisant l’ argument de la méthode PostAsync appelé Content . Dans votre cas, le meilleur choix sera d’utiliser ObjectContent

Vous trouverez ci-dessous un exemple d’utilisation d’un object. Appel d’une API Web À partir d’un client .NET , citez cet article:

PostAsJsonAsync est une méthode d’extension définie dans System.Net.Http.HttpClientExtensions. Cela équivaut à ce qui suit:

 var product = new Product() { Name = "Gizmo", Price = 100, Category = "Widget" }; // Create the JSON formatter. MediaTypeFormatter jsonFormatter = new JsonMediaTypeFormatter(); // Use the JSON formatter to create the content of the request body. HttpContent content = new ObjectContent(product, jsonFormatter); // Send the request. var resp = client.PostAsync("api/products", content).Result; 

Fondamentalement, vous devez sérialiser le modèle dans le corps de publication de manière à ce que l’infrastructure mvc puisse se désérialiser et reconfigurer le modèle. Ces publications devraient vous aider avec le format des données sérialisées:

http://www.asp.net/web-api/overview/formats-and-model-binding

http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api