Web API身份验证会将request.authentication设置为false

时间:2016-06-04 12:06:34

标签: asp.net-mvc-4 asp.net-web-api

我有一个我在ASP.NET MVC中创建的项目,现在工作的第二部分是将ASP.NET MVC应用程序(基本上是数据库)的逻辑传递给ASP.NET Web API并进行连接和他们一起。

问题是,我已经完成了连接,并且我已经在Web API数据库中保存了值,但是发生了一件奇怪的事情。

我的layout.cs.html文件中有标记:

<body>
@if (User.Identity.IsAuthenticated)
{
    <div class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                @Html.ActionLink("MSDiary", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                        <li>@Html.ActionLink("Despesas", "Index", "Despesas")</li>
                        <li>@Html.ActionLink("Rendimentos", "Index", "Rendimentos")</li>
                        <li>@Html.ActionLink("Tipos de Despesa", "Index", "TipoDespesas")</li>
                        <li>@Html.ActionLink("Tipos de Pagamento", "Index", "TipoPagamentos")</li>
                        <li>@Html.ActionLink("Tipos de Rendimento", "Index", "TipoRendimentos")</li>
                </ul>
                @Html.Partial("_LoginPartial")
            </div>
        </div>
    </div>
}
    <div class="container body-content">
        @RenderBody()
        <footer>
            @if (Request.IsAuthenticated)
            {
                <p>@Html.Action("_ObtemSaldo", "Home")</p>
            }
        </footer>
    </div>
    @Scripts.Render("~/bundles/bootstrap")
    @RenderSection("scripts", required: false)
</body>
</html>

该请求经过身份验证显示导航栏位于顶部或不依赖于用户是否经过身份验证我将其切断以查看实际上我的程序是否正在获取用户,并且它有点让用户知道问题不在于连接,但请求被认证不要在控制器中改变:S

这是我的登录控制器:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
        if (!ModelState.IsValid)
        {
            return View(model);
        }

        try
        {
            var client = WebApiHttpClient.GetClient();
            string username = model.Email;
            string password = model.Password;
            HttpContent content = new StringContent(
            "grant_type=password&username=" + username + "&password=" + password,
            System.Text.Encoding.UTF8,
            "application/x-www-form-urlencoded");
            var response = await client.PostAsync("/Token", content);
            if (response.IsSuccessStatusCode)
            {
                TokenResponse tokenResponse =
                await response.Content.ReadAsAsync<TokenResponse>();
                WebApiHttpClient.storeToken(tokenResponse);
                // return Content(tokenResponse.AccessToken);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                return Content("Ocorreu um erro: " + response.StatusCode);
            }
        }
        catch
        {
            return Content("Ocorreu um erro.");
        }
}

我已经尝试user.authenticated如果有人可以帮助我,我仍然无法工作我会非常感激:D

ps:抱歉我的英文不好

1 个答案:

答案 0 :(得分:0)

如果我理解,你有一个MVC应用程序并且你已经将一些逻辑(数据库访问)传递给Web Api项目,所以当你向服务器发送一个表单/请求时,控制器将从MVC接收它,之后,请求将被发送到WebApi(至少是我从您的代码中理解的)。

您的问题是用户登录到应用程序,MVC Controller进入WebApi对用户进行身份验证,之后,即使登录和密码正确,MVC(View)仍然认为用户未登录。

好吧,如果我所描述的是正确的,看到你的代码,我会说用户确实在Web Api中进行身份验证,但是,由于MVC是与用户的直接接口,因此缺少设置MVC应用程序用户通过某种身份验证方法进行身份验证,例如:

FormsAuthentication.SetAuthCookie(username, false);

值得一提的是,您必须存储令牌(来自webapi,在用户通过身份验证后),以便nexts向WebApi请求它认为用户已对该特定令牌进行身份验证。

希望我有所帮助。

此致