I have created separated project for ASP .NET MVC WebAPI 2 and I would like to call Register
method. (I use a project is created by VS2013 by default.)
[Authorize]
[RoutePrefix("api/Account")]
public class AccountController : ApiController
{
....
// POST api/Account/Register
[AllowAnonymous]
[Route("Register")]
public async Task<IHttpActionResult> 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();
}
I use a simple WPF app to do this. I am not sure about the syntax to call this method and pass username and password to it dueRegisterBindingModel
.
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
{
}
}
Any clue?
Basically you need to serialize the model into the post body in a way that the mvc framework can deserialize and form the model again. These posts should help you with the format of the serialized data:
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
It is depending from routing of yor Web API service but seems to be you have forgotten controller name in route.
By default it should be
Or your code
And by the way HTTP Verb should be POST and not GET and you should put something into the body.
You can pass through body using PostAsync method argument called Content. In your case the best choice will be use ObjectContent
Sample on how to use object you can find here Calling a Web API From a .NET Client, quote from this article: