响应重定向vs http请求获取响应

时间:2014-09-18 22:38:18

标签: c# asp.net asp.net-mvc redirect

我想要做的是链接和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”布尔值有关,它结束了响应,但我不明白。

如果你能帮助我,我将非常感激。问候,路易斯。

1 个答案:

答案 0 :(得分:0)

登录票证是存储在客户端浏览器上的cookie。重定向到注销是有效的,因为它告诉客户端浏览器使用http 302响应重定向,然后您的注销代码使cookie过期。

在第二次尝试中,您在服务器端使用WebRequest发出请求,客户端对此一无所知,并且仍然存储了有效的登录cookie。

也许您的注销控制器可以使用ReturnUrl参数并使用该网址重定向?

/MyController/Logout?ReturnUrl=/login.aspx