我想要做的是链接和ASP应用程序与MVC应用程序。现在MVC应用程序包含在我的ASP应用程序的框架中。我想要做的是当我单击我的ASP应用程序的注销按钮时,也会调用MVC应用程序的注销方法。
现在我的退出页面如下所示:
<% Dim xmlhttp, cookie
'xmlHttp makes and async call to a POST method which finishes the ASP application session
Session.Abandon
'I execute methods to set the cookie value to an empty string
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Logout</title>
</head>
<body onload="document.forms[0].submit();">
<form method="POST" action="/end_MVC_Application.aspx">
<input type="submit" style="display:none" />
</form>
</body>
</html>
end_MVC_Application页面实际上是空的:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="end_MVC_Application.aspx.cs" Inherits="end_MVC_Application" %>
但背后的代码有以下逻辑。我在这里做的是通过重定向页面以调用注销MVC特定方法来调用注销MVC应用程序的方法。请注意,Logout方法不会返回MVC上的视图,因为我不需要它。
protected void Page_Load(object sender, EventArgs e)
{
string url = "http:localhost/MyController/Logout";
Response.Redirect(url,true);
}
这很好用,MVC应用程序实际上正在注销。但是,我需要重定向到ASP应用程序的实际登录页面。我尝试了不同的方法,但似乎都没有。我试图将前一个方法的Response.Redirect更改为:
protected void Page_Load(object sender, EventArgs e)
{
string url = "http:localhost/MyController/Logout";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Response.Write("<script>");
Response.Write("window.open('http://localhost/login.asp" + "', '_top')");
Response.Write("</script>");
}
这样我就验证了MVC应用程序上的注销方法正在被调用,并且应用程序正被重定向到登录页面。但是,即使正在调用注销方法,这也不会关闭MVC应用程序。 我不明白为什么Response.Redirect行为不同。我猜它与“true”布尔值有关,它结束了响应,但我不明白。
如果你能帮助我,我将非常感激。问候,路易斯。
答案 0 :(得分:0)
登录票证是存储在客户端浏览器上的cookie。重定向到注销是有效的,因为它告诉客户端浏览器使用http 302响应重定向,然后您的注销代码使cookie过期。
在第二次尝试中,您在服务器端使用WebRequest发出请求,客户端对此一无所知,并且仍然存储了有效的登录cookie。
也许您的注销控制器可以使用ReturnUrl参数并使用该网址重定向?
/MyController/Logout?ReturnUrl=/login.aspx