绕过视图调用MVC中的控制器操作

时间:2018-10-23 09:51:31

标签: c# asp.net-mvc

我正在使用MVC应用程序(https://github.com/microsoftgraph/aspnet-webhooks-rest-sample),其中用户登录其Microsoft帐户并创建对Graph Webhook的订阅,以监视电子邮件。该应用程序运行良好,但是我将其集成到一个更大的应用程序中,该用户将不会登录,而是在启动该应用程序时需要订阅Graph webhook。

我的问题是:当前,用户单击“登录”,这将调用SignIn()控制器操作。如何在不通过视图的情况下调用控制器操作的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和Startup.cs(如hereherehere中)调用控制器。但是,由于HttpContext为空,应用程序失败。我尝试通过在AccountController.cs中添加以下代码并从Startup.cs调用它来规避此问题,但应用仍然失败。如何在没有用户单击任何按钮的情况下使用有效的HttpContext调用SignIn()?

public void Triage()
{
    AccountController acntController = new AccountController();
    acntController.ControllerContext = new ControllerContext(
        this.ControllerContext.RequestContext,
            acntController
    );
    acntController.SignIn();
}

编辑1: 在尝试了各种方法之后,我觉得上述方法可能不合适。我将发布一个不同的问题。如果有任何更改,我将编辑问题。谢谢。

0 个答案:

没有答案