Как зарегистрировать нового пользователя в приложении ASP.NET MVC, передав данные в веб-API? - PullRequest
0 голосов
/ 14 октября 2018

В моем приложении ASP.NET MVC 5 я хочу, чтобы пользователь Admin добавил нового пользователя.После входа поля формы регистрации (представление регистрации) с новыми пользовательскими значениями регистрируются в AccountController приложения ASP.NET MVC 5 следующим образом, который затем вызывает API, и данные должны передаваться туда:

[HttpPost]
//[ValidateAntiForgeryToken]
public ActionResult Register(AccountRegistration register)
{
        string baseAddress = ConfigurationManager.AppSettings["ApiBaseUrl"];

        //var client = new HttpClient();
        //client.BaseAddress = new Uri("api/Account/Register");
        //client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
        string accessToken = this.ControllerContext.HttpContext.Request.Cookies["auth_key"].Values["token"];

        using (var client = new HttpClient())
        {                
            var form = new Dictionary<string, string>
            {
                { "firstname", register.FirstName.Trim()},
                { "lastname", register.LastName.Trim()},
                { "email", register.Email.Trim()},
                { "phone", register.PhoneNo.Trim()},
                { "password", register.Password.Trim()},
            };

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", accessToken);

            var res = client.PostAsync(baseAddress + "/api/Account/Register", new StringContent(JsonConvert.SerializeObject(register), Encoding.UTF8, "application/json"));
            res.Wait();
            var taskResponse = res.Result;

            var data = taskResponse.Content.ReadAsAsync<object>(new[] { new JsonMediaTypeFormatter() }).Result;

        }

        return View();
}

Вот мой код веб-API AccountController:

[HttpPost]
public IHttpActionResult Register([FromBody]UserRegister register)
{
        DBAccess dblayer = new DBAccess();

        try
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            UserManager<IdentityUser> _manager = new UserManager<IdentityUser>(new UserStore<IdentityUser>(new TachusApi.DBContext.AuthDbContext()));
            string pHash = _manager.PasswordHasher.HashPassword(register.Password);

            dblayer.SaveAdmin(register, pHash);
            return Ok("Success");
        }
        catch (Exception)
        {
            return Ok("Something went wrong.");
        }
}

А вот метод DBAccess.cs, который вызывается из метода Register этого API для фактического сохранения данных в базе данных.

#region Save Admin

    public void SaveAdmin(UserRegister user, string passwordHash)
    {
        SqlConnection conn = null;
        SqlCommand command = null;
        int retValue;

        conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

        command = conn.CreateCommand();
        command.CommandText = "Sp_Add_Admin";
        command.CommandType = CommandType.StoredProcedure;

        command.Parameters.AddWithValue("@Email", user.Email);
        command.Parameters.AddWithValue("@PasswordHash", passwordHash);
        command.Parameters.AddWithValue("@FirstName", user.FirstName);
        command.Parameters.AddWithValue("@LastName", user.LastName);
        command.Parameters.AddWithValue("@PhoneNumber", user.PhoneNumber);

        conn.Open();
        command.ExecuteNonQuery();
        conn.Close();

    }

    #endregion

Моя проблема в том, что у меня есть все значения Register.cshtml (представление регистрации пользователя), доступные как в методах Register, так и SaveAdmin API, кроме номера телефона.Я думаю, что у меня есть некоторая неопределенность в модельных классах, которые я создал.Я хочу, чтобы данные сохранялись в базе данных с помощью созданной мной хранимой процедуры.

Когда я запускаю код и вызывается API, я получаю исключение.Есть ли кто-нибудь, кто может предложить мне лучший способ управления моим кодом, чтобы я мог сохранить данные в базе данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...