我正在编写一个简单的网络应用程序,允许用户通过Facebook登录。当使用javascript sdk时,我能够检索正确的凭据,但是我的ajax帖子无法找到mvc动作来处理信息。
这是js代码:
FB.getLoginStatus(function (response) {
if (response.status === 'connected') {
var credentials = { uid: response.authResponse.userID, accessToken: response.authResponse.accessToken };
SubmitLogin(credentials);
}
});
function SubmitLogin(credentials) {
alert("Creds: " + credentials.uid + ":::" + credentials.accessToken);
$.ajax({
type: "POST",
ContentType: 'application/json',
url: '@Url.Action("FacebookLogin","Home")',
data:JSON.stringify(credentials),
success: function () {
window.location("~/Views/Account/Home.cshtml");
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.responseText);
}
});
}
和相应的控制器:
[HttpPost]
public JsonResult FacebookLogin(string uid, string accessToken)
{
Session["uid"] = uid;
Session["accessToken"] = accessToken;
return null;
}
控制器中使用的模型:
public class FBLoginModel
{
public string uid { get; set; }
public string accessToken { get; set; }
}
js函数中的警报显示正确的令牌,但我的ajax帖子无法执行操作。当我删除控制器上方的“[HttpPost]”时,我可以访问该操作,但我尝试传递的所有数据都为空。
非常感谢任何帮助。感谢。
答案 0 :(得分:2)
使用
$.ajax({
type: "POST",
ContentType: 'application/json',
url: '@Url.Action("FacebookLogin","Home")',
data:JSON.stringify(credentials),
success: function () {
window.location("~/Views/Account/Home.cshtml");
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.responseText);
}
});
Ther应该在< Url.Action()'
中单引号Yout控制器操作应如下所示。因为您没有传递模型项
public JsonResult FacebookLogin(long uid,string accessToken)
{
Session["uid"] = uid;
Session["accessToken"] = accessToken;
return null; //Because you are not posting anything back
}
答案 1 :(得分:1)
我以某种方式设计了一个解决方案...通过写出url并在我的ajax调用中添加正斜杠,不知怎的,我的ajax调用可以找到我的动作。
$.ajax({
type: 'POST',
url: 'Home/FacebookLogin/',
data: {
'uid': response.authResponse.userID,
'accessToken': response.authResponse.accessToken
},
cache: false,
success: function (result) { },
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.responseText);
}
});