调用AccountController从控制台应用程序注册web api方法

时间:2017-03-27 08:24:33

标签: c# asp.net-web-api

我想从控制台应用程序注册用户。如何将用户对象添加到Web api调用?

到目前为止,我的做法是这样的。

这是帐户控制器方法

public async Task<IHttpActionResult> Register(RegisterBindingModel model)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        var user = new ApplicationUser() { UserName = model.Email, Email = model.Email, FirstName = model.FirstName, LastName = model.LastName };

        IdentityResult result = await UserManager.CreateAsync(user, model.Password);

        //*******************************
        if (!result.Succeeded)
        {
            return GetErrorResult(result);
        }
        //check role and create




        return Ok("success");
    }

我想从Console应用程序中调用它并添加用户对象。

static async Task Register(RegisterBindingModel user)
    {
        System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();
        client.BaseAddress = new Uri("http://localhost/MyService/");
        client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
        var resp2 = client.PostAsync("api/Account/Register", //how would I add the user object)


    }

如何将用户对象添加到我的通话中?

亲切的问候

1 个答案:

答案 0 :(得分:2)

您可以使用newtonsoft:

将对象转换为json
var myJson = JsonConvert.SerializeObject(myObj);

然后您创建一个新的StringContent

var content = new StringContent(myJson, Encoding.UTF8, "application/json");

请参阅文档StringContent constructorStringContent

然后你传递了这个:

await client.PostAsync("api/Account/Register", content)

你可以传递给SerializeObject的两个对象,你可以做一个匿名类型:

var myJson = JsonConvert.SerializeObject(new { firstName = "Bob", lastName = "Marley" });

或者,您可以创建与控制器期望的请求对象完全相同的模型:

class RegistrationModel
{
    public string FirstName {get;set;} // etc.. etc...
}

var myJson = JsonConvert.SerializeObject(new RegistrationModel { FirstName = "Bob" });

我实际上创建了一个JsonContent对象来代替:

public class JsonContent : StringContent
{
    private const string ApplicationJsonMediaType = "application/json";
    public JsonContent(object content) : base(SerializeContent(content), Encoding.UTF8, ApplicationJsonMediaType)
    {
    }

    private static string SerializeContent(object content)
    {
        return JsonConvert.SerializeObject(content);
    }
}

并使用:

var content = new JsonContent(myObj);
await client.PostAsync("api/Account/Register", content);