Я пытаюсь добавить еще один параметр в мои конструкторы в своем приложении Asp.Net Core MVC, но сталкиваюсь с некоторыми трудностями при этом.Вот как выглядит моя реализация.
Действие входа:
[HttpPost, AllowAnonymous, ValidateAntiForgeryToken]
public IActionResult Login(LoginViewModel loginModel, string returnUrl = null)
{
returnUrl = string.IsNullOrWhiteSpace(returnUrl) ? ApiConstants.Dashboard : returnUrl;
ViewData["ReturnUrl"] = returnUrl;
if (!ModelState.IsValid) return View(loginModel);
var token = Service.Login(loginModel);
if (string.IsNullOrWhiteSpace(token)) return View(loginModel);
TempData["token"] = token;
AddCookie(token);
return RedirectToAction("Index", "Dashboard");
}
private void AddCookie(string token)
{
HttpContext.Response.Cookies.Append("token", token,new CookieOptions()
{
Expires = DateTimeOffset.Now.AddDays(-1)
});
}
Контроллер:
private readonly INozzleService _nozzleService;
public NozzleController(INozzleService nozzleService)
{
var token = HttpContext.Request.Cookies["token"];
_nozzleService = nozzleService;
}
Обслуживание форсунок:
private static INozzleAdapter Adapter { get; set; }
public NozzleService(INozzleAdapter adapter)
{
Adapter = adapter;
}
Адаптер форсунки:
private readonly string _token;
public NozzleAdapter(string token)
{
_token = token;
}
Как только я получу токен в адаптере, я добавлю токен в заголовок HttpClient
.
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _token);
Настройка служб при запуске:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ITempDataProvider, CookieTempDataProvider>();
services.AddDistributedMemoryCache();
services.AddSession();
services.AddTransient<IAccountService, AccountService>();
services.AddTransient<IAccountAdapter, AccountAdapter>();
services.AddTransient<INozzleService, NozzleService>();
services.AddTransient<INozzleAdapter, NozzleAdapter>();
services.AddMvc();
}
Не могли бы вы, пожалуйстадайте мне знать, что может быть лучшим способом для достижения этой цели в приложении Asp.Net core 2.0 MVC?Я прочитал пост о том, что использование нескольких конструкторов не является хорошей идеей в приложении Asp.Net Core MVC, поэтому я не хочу использовать несколько конструкторов.
В то же время я хочу удостовериться, что все мои классы можно тестировать с помощью DI.Какой должен быть лучший подход здесь?
Пожалуйста, дайте мне знать, если кому-то нужна дополнительная информация.
Обновление:
В соответствии с решением Shyju, я смог реализовать cookie, однакоМне все еще нужно передать два параметра одному из моих контроллеров.
private readonly IAccountService _service;
private readonly ITokenProvider _tokenProvider;
public AccountController(IAccountService service, ITokenProvider tokenProvider)
{
_service = service;
_tokenProvider = tokenProvider;
}
Чтобы я мог, используйте метод AddToken, как показано ниже.
_tokenProvider.AddToken(token);