我在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函数?
答案 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>
}