Я новичок в .NET CORE и пытаюсь работать с внешними API, использующими архитектуру MVC приложения .NET CORE.Как новичку, мне действительно трудно понять основную причину MVC, хорошо сказав, что я провел свое собственное исследование и многое понял.Прямо сейчас у меня есть два вопроса (1-й о предложении Как начать, 2-й о работе, которую я проделал до сих пор)
Вопрос 1 (Предложение) Итак, как я сказал, япытаюсь работать над вызовом внешнего API с использованием архитектуры MVC.То, что я хочу сделать, это предположить, что администратор регистрируется в первый раз, первое имя пользователя и пароль по умолчанию - «admin» и «myadminpassword» соответственно.Для входа в систему администратор должен предоставить новый пароль, который отправляется в виде тела запроса в API.Теперь я хочу сохранить этот новый пароль в моей БД, а затем оттуда в конечную точку API.Это выполнимо?и это хорошая идея?
Вопрос 2 (Подход до сих пор)
Так что получение справки из множества учебных пособий ниже - это мой код, который я делал до сих пор.
Main_Application / Области / Приложение / Вид / Главная / Index.cshtml
@using (Html.BeginForm("Login", "WhAuth", FormMethod.Post))
{
<label>
Username:
<input type="text" placeholder="admin" readonly />
</label>
<br />
<label>
Password:
<input type="text" placeholder="*****" readonly />
</label>
<br />
<label>
Enter New Password:
@Html.TextAreaFor(m => m.New_password, 5,5,new { })
</label>
<br />
<button class="btn btn-default" type="submit">Sign up as Admin</button>
}
Main_Application / Области / Приложение / Модели / AdminLoginModel.cs
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace PTCConnector.Areas.Whatsapp.Models
{
public class AdminLoginModel
{
public string Df_username = "admin";
public string Df_password = "anySecretPassword";
[Required(ErrorMessage = "New Password Is Required")]
public string New_password { get; set; }
}
}
Main_Application / Models / DB / whapp.cs
public class whapp : BaseEntity
{
public string Username { get; set; }
public string Password { get; set; }
public string New_Password { get; set; }
public string Token { get; set; }
public string WhatsappId { get; set; } //Whatsapp ID
public string type { get; set; }
public string recipient_type { get; set; }
public string Messagebody { get; set; }
public string URL { get; set; }
public string Group_id { get; set; }
public string Caption { get; set; }
public string Media_Id { get; set; }
public string Status { get; set; }
public string GroupName { get; set; }
}
Main_Application / Data / ApplicationDBContext.cs
public DbSet<whapp> whapp { get; set; }
Main_Application / Области / Приложение / Контроллеры / WhAuthController.cs
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using PTCConnector.Areas.Whatsapp.Models;
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
namespace PTCConnector.Areas.Whatsapp.Controllers
{
[Area("Whatsapp")]
[TypeFilter(typeof(AdminActionFilter))]
[Authorize(Roles = "Admin")]
public class WhAuthController : Controller
{
public AdminLoginModel whLogin = new AdminLoginModel();
public async Task Login()
{
HttpClientHandler clientHandler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; }
};
var client = new HttpClient(clientHandler);
byte[] bytes = Encoding.UTF8.GetBytes($"{whLogin.Df_username}:{whLogin.Df_password}");
var Base64Credentials = Convert.ToBase64String(bytes);
System.Diagnostics.Debug.WriteLine(Base64Credentials);
// Set Base64Credentials as Authorization header with Prefix
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Base64Credentials);
// Just some data for POST, change freely!
var data = new Dictionary<string, string>
{
{ "new_password", $"{whLogin.New_password}" } //
};
System.Diagnostics.Debug.WriteLine(data.Values);
Console.WriteLine("here 1");
// Encode the data in FORM URL Data
var content = new FormUrlEncodedContent(data);
// Make Async Post Call with Client. Parameters are URL and Data to POST!
var response = await client.PostAsync("https://localhost:9090/v1/users/login", content);
// Async!! - Read the response content as String
var responseString = await response.Content.ReadAsStringAsync();
// Print out the Response String for Debugging!
//Console.WriteLine(responseString);
System.Diagnostics.Debug.WriteLine(responseString);
System.Diagnostics.Debug.WriteLine("Check");
Console.WriteLine("CheckNow");
}
}
}
Main_Application / Startup.cs
services.AddDbContext<ApplicationDbContext> ... //
services.AddHttpClient("WhappClient", client =>
{
client.BaseAddress = new Uri("https://localhost:9090/v1/users/login");
client.DefaultRequestHeaders.Add("username", "admin");
client.DefaultRequestHeaders.Add("password", "anySecretPassword");
});
Все работает нормально, моя главная цель - также разместить данные в базе данных, чтобы можно было сохранить информацию, а также возвращаемый результат API также необходимо сохранить в базе данных для будущего использования.
Редактировать Приложение работает на Docker-контейнере путьиз которых https://localhost:9090/
Моя цель состоит в том, чтобы, когда пользователь заполнил информацию о new_password в поле ввода и нажал submit, приложение должно нажать на контроллере новый_пароль, как показано ниже.
var data = new Dictionary<string, string>
{
{ "new_password", $"{whLogin.New_password}" } //
};
, который затемпри достижении определенной конечной точки, как упоминалось await client.PostAsync("https://localhost:9090/v1/users/login", content);
, возвращением будет токен, который я хочу сохранить в базе данных для будущих вызовов конечной точки, кроме того, заданный новый_пароль также будет сохранен в формате хэша в моей базе данных.