我有一个带有以下代码的Controller方法:
ClearAuthenticationCookies();
FormsAuthentication.SetAuthCookie(EmailAddress, false);
RedirectToAction("Index", "Home");
var responseObject = new responseObject
{
responseCode = "2",
responseMessage = "No"
};
return Json(new {responseObject = responseObject});
这是通过ajax从其他网站执行的,但未在浏览器中显示正确的网址。如果我直接登录,它可以工作:
$.ajax({
type: "POST",
url: "http://localhost:51437/UserAccount/SignOn2",
dataType: 'json',
data: jsonData,
crossDomain: true,
success: function(result) {
},
error: function(result) {
}
});
我还必须在实际登录之前单击我的链接两次,但找不到该页面。
答案 0 :(得分:2)
您的控制器签名应为public RedirectResult SignOn(...)
,return RedirectToAction("Index", "Home");
是您应从控制器返回的对象。在此之后不要返回任何JsonResult
。
<强>更新强>
您可以通过一个请求返回一个响应。
要实现您的目标,您有两种选择。首先:返回json结果,然后当客户端收到json结果并验证它时,您可以向服务器发送另一个请求,然后重定向到另一个页面。或者您可以从客户端重定向,使用window.location.replace
通过js更改当前页面。此外,您可以在服务器上准备链接以实现所有.net路由优势,并将其包含在json结果中,而不是像这样:
$.ajax {
..
..
..
success: function(data) {
alert(data.message_for_user);
window.location.replace(data.url_to_redirect);
}
}