【问题标题】:C# - HttpWebResponse redirect to external URLC# - HttpWebResponse 重定向到外部 URL
【发布时间】:2015-02-14 17:25:36
【问题描述】:

我正在努力实现以下目标:

  • 我正在构建一个 MVC 网站,它将帮助我自动登录到另一个网站。
  • WebsiteA 将使用 HttpWebRequest 调用 WebsiteB
  • WebsiteA 将通过 headers (request.headers.add) 发送用户的详细信息
  • WebsiteB 将处理所有用户身份验证,并在内部重定向到授予该用户访问权限的另一个页面。

我已经设法实现了其中的一部分,但我一直在显示重定向返回。有谁知道这是否可以实现?

这是在 WebsiteA 应用程序中调用的一些代码:

        [HttpPost]
        [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
        public ActionResult LogIn(myModel model)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://websiteB/LogIn.aspx");
            request.AllowAutoRedirect = true;
            request.Method = "POST";
            request.Headers.Add("MyUserToLogon", model.User); //I'm sending my user through headers
            string postData = "This is a test";
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = byteArray.Length;
            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();

            //Get the response from the Login Page
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            // Display the status.
            Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            dataStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream);
            string responseFromServer = reader.ReadToEnd();
            Console.WriteLine(responseFromServer);

            reader.Close();
            dataStream.Close();
            response.Close();

            //What to do here? I want to go to the redirected page from WebSiteB/Page1.aspx
            //See code below for WebSiteB.

            return null;
        }

在 WebSiteB 中,我有在用户成功登录时执行重定向的代码:

        .......
        users = Request.QueryString["MyUserToLogon"];
        .......

        private void LogIn(string user)
        {
            GrantUser(user, Session.SessionID);

            HttpCookie mycookie = new HttpCookie("test");
            mycookie .Expires = DateTime.Now.AddMinutes(10);
            Response.Cookies.Add(mycookie);
            Response.AddHeader("mycookie ", mycookie .Value);

            Response.Redirect("WebsiteB/Page1.aspx");
        }

任何帮助将不胜感激。

【问题讨论】:

标签: c# redirect cookies httpwebrequest httpwebresponse


【解决方案1】:

我的网站也遇到了同样的问题。

您不能使用重定向,因为它是由 IIS 完成的,而且您永远不会收到从 WebSiteB 返回的所有身份验证 cookie。

在我的情况下,返回视图而不是重定向有效。然后在设置 cookie 后重定向到 WebSiteA

您似乎还需要为您的请求添加 cookie 容器以获取 cookie。

这是可能的代码

登陆地点

 [HttpPost]
    public ActionResult Login(string accountId)
    {

        var url = "http://...."

        var request = (HttpWebRequest)WebRequest.Create(url + "/Account/WamLogin/");

        request.Headers.Add("user", accountId);
        request.CookieContainer = new CookieContainer();

        var response = (HttpWebResponse)request.GetResponse();

        foreach (Cookie cook in response.Cookies)
        {
            Response.Cookies.Add(new HttpCookie(cook.Name, cook.Value) { Expires = cook.Expires, HttpOnly = cook.HttpOnly, Domain = cook.Domain });
        }

        return new RedirectResult(url);
    }

这是 WebSiteB 代码

[AllowAnonymous]
public virtual ActionResult WamLogin(string returnUrl, string id)
{
    var accountId= Request.Headers["user"];

    .....

    return View(MVC.Account.Views.Login);
}

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2017-12-11
    • 2012-01-10
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多