Я использую приложение MVC (https://github.com/microsoftgraph/aspnet-webhooks-rest-sample), где пользователь входит в свою учетную запись Microsoft и создает подписку на веб-крючок Graph для отслеживания сообщений электронной почты. Приложение работает нормально, но я его интегрируюв более крупное приложение, в котором пользователь не будет входить в систему, а должен будет подписаться на веб-крючок Graph при запуске приложения.
Мой вопрос такой: в настоящее время пользователь нажимаетна «вход», который вызывает действие контроллера SignIn (). Как я могу вызвать часть входа контроллера действия контроллера, не проходя через представление?
Соответствующие части кода ниже:
Login.cshtml
<li class="nav-item">
@Html.ActionLink("Sign In", "SignIn", "Account", new { area = "" }, new { @class = "nav-link" })
</li>
AccountController.cs
[HttpGet]
public void SignIn()
{
if (HttpContext.User == null || !HttpContext.User.Identity.IsAuthenticated)
{
HttpContext.GetOwinContext().Authentication.Challenge(
new AuthenticationProperties { RedirectUri = "/" },
OpenIdConnectAuthenticationDefaults.AuthenticationType);
}
}
Я попытался вызвать контроллер из Global.asax.cs и из автозагрузки.cs (как уже упоминалось здесь , здесь и здесь ). Однако приложение завершается ошибкой из-за того, что HttpContext имеет значение null. Я попытался обойти это, добавив следующеекод в AccountController.cs и вызов его из Startup.cs, но приложение по-прежнему не работает.Как я могу вызвать SignIn () с действительным HttpContext и без нажатия какой-либо кнопки пользователем?
public void Triage()
{
AccountController acntController = new AccountController();
acntController.ControllerContext = new ControllerContext(
this.ControllerContext.RequestContext,
acntController
);
acntController.SignIn();
}
EDIT 1: После опробования различных подходов, я чувствую, что упомянутый выше можетне быть правым.Я отправлю другой вопрос.Если что-то изменится, я отредактирую вопрос.Спасибо.