gpt4 book ai didi

c# - 如何正确调用 ASP .NET MVC WebAPI 2 方法

转载 作者:太空狗 更新时间:2023-10-29 22:59:29 26 4
gpt4 key购买 nike

我已经为 ASP .NET MVC WebAPI 2 创建了单独的项目,我想调用 Register 方法。 (我用的项目默认是VS2013创建的。)

[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();
}

我使用简单的 WPF 应用程序来执行此操作。由于 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
{
}
}

有什么线索吗?

最佳答案

这取决于您的 Web API 服务的路由,但似乎您忘记了路由中的 Controller 名称。

默认应该是

api/Account/Register

或者你的代码

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...);

顺便说一句,HTTP 动词应该是 POST 而不是 GET,你应该在正文中放一些东西。

您可以使用 PostAsync method argument called Content 穿过 body .在您的情况下,最好的选择是使用 ObjectContent

有关如何使用对象的示例,您可以在此处找到 Calling a Web API From a .NET Client ,引用这篇文章:

PostAsJsonAsync is an extension method defined in System.Net.Http.HttpClientExtensions. It is equivalent to the following:

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>(product, jsonFormatter);

// Send the request.
var resp = client.PostAsync("api/products", content).Result;

关于c# - 如何正确调用 ASP .NET MVC WebAPI 2 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20903420/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com