В моем приложении 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, я получаю исключение.Есть ли кто-нибудь, кто может предложить мне лучший способ управления моим кодом, чтобы я мог сохранить данные в базе данных?