VS 2013 MVC ASP.NET Identity默认项目并使用Google登录

时间:2014-03-27 03:29:15

标签: asp.net-mvc asp.net-mvc-5

我在VS 2013中使用默认的MVC模板,允许使用谷歌登录。我正在尝试修改程序,以便我不必输入该站点的用户名。所以我添加了一个google图像链接,其中登录是。我想让它直接进入Account / ExternalLogin页面并自动使用google作为源。

当我使用以下内容时,无法找到该页面:

<li>@Html.ActionImage("ExternalLogin", "Account", null, "~/Content/Red-signin_Long_base_20dp.png", "Google", new { provider="Google", returnUrl="" })</li>

但是,当我使用以下内容时,它会找到页面:

<li>@Html.ActionImage("Login", "Account", null, "~/Content/Red-signin_Long_base_20dp.png", "Google", new { provider="Google", returnUrl="" })</li>

这似乎是一个MVC问题,但是为什么它不能在Account控制器中找到ExternalLogin函数,但是它可以在同一个控制器中找到Login函数?

1 个答案:

答案 0 :(得分:2)

查看ExternalLogin()方法......

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult ExternalLogin(string provider, string returnUrl)

Account/ExternalLogin只会响应POST请求。看起来你的ActionImage()助手正在使用GET,这就是它获得404的原因。此外,该呼叫需要有效的防伪令牌。

要提交包含所需参数和防伪令牌的POST,请查看Microsoft使用Logout链接(~/Views/Shared/_LoginPartial.cshtml)执行的操作并根据您的需要进行调整...

@using (Html.BeginForm("ExternalLogin", "Account", FormMethod.Post, new { id = "googleForm" }))
{
    @Html.AntiForgeryToken()
    @Html.Hidden("provider", "Google")
    <a href="javascript:document.getElementById('googleForm').submit()">
        <img src="~/Content/Red-signin_Long_base_20dp.png" />
    </a>
}