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

2024-02-13

我已经创建了单独的项目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();
    }

I use a 简单的 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 服务的路由,但似乎您忘记了路由中的控制器名称。

默认情况下应该是

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 方法参数称为 Content http://msdn.microsoft.com/en-us/library/hh138242%28v=vs.110%29.aspx。根据您的情况,最好的选择是使用对象内容 http://msdn.microsoft.com/en-us/library/system.net.http.objectcontent%28v=vs.118%29.aspx

您可以在此处找到有关如何使用对象的示例从 .NET 客户端调用 Web API http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-net-client,引用这篇文章:

PostAsJsonAsync 是定义在中的扩展方法 System.Net.Http.HttpClientExtensions。它相当于 下列的:

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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确调用 ASP .NET MVC WebAPI 2 方法 的相关文章

随机推荐