从外部站点登录(ASP.NET MVC 3.0) [英] Login from external site (ASP.NET MVC 3.0)

查看:70
本文介绍了从外部站点登录(ASP.NET MVC 3.0)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,



我的案例 是: 我有 两个
网站
一个有权访问 客户
(私有) 和公共 <跨度>。我
n 能够
公开登录 到私人
网站 要做到这一点我 添加
相应的字段(用户
和密码 ),我通过POST操作将其发送到私有站点,如下所示


 的CookieContainer饼干=新的CookieContainer();



&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP; //请求登录页面来获得会话cookie

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; GETHtml(RETURNURL,饼干,RETURNURL);



&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP; //现在我们可以登录了<
               登录(model.UserName,model.Password,饼干,RETURNURL);

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP; return Redirect(@" http:// privada /");

        public string GETHtml(string url,CookieContainer cookies,string returnUrl)

        {

            HttpWebRequest的的WebRequest =(HttpWebRequest的)WebRequest.Create(URL);

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; webRequest.CookieContainer = cookies;

            webRequest.UserAgent =" Mozilla / 4.0(兼容; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.5.21022;" ;;)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; webRequest.Referer = RETURNURL;

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP;

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;使用(HttpWebResponse WebResponse类=(HttpWebResponse)webRequest.GetResponse( ))
            {

      ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; //我们需要任何回应Cookie添加到我们的Cookie容器&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; cookies.Add(webResponse.Cookies);



        &nb属;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;使用(VAR流=新的StreamReader(webResponse.GetResponseStream()))

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; return stream.ReadToEnd();

            }
        }



        public bool Login(string Username,string Password,CookieContainer cookies,string returnUrl)

        {

           串poststring =的String.Format(QUOT;用户名= {0}&安培;密码= {1}&安培; BTN-acceder.x = 63&安培; BTN-acceder.y = 13&安培; BTN-acceder =登录" ;,

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;用户名,密码);

&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; byte [] postdata = Encoding.UTF8.GetBytes(poststring);



           &NBSP; HttpWebRequest的的WebRequest =(HttpWebRequest的)WebRequest.Create(RETURNURL);

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; webRequest.CookieContainer = cookies;

            webRequest.Method =" POST";

            webRequest.Referer = returnUrl;

            webRequest.Headers.Add(QUOT;来源" ;, @" HTTP:// PRIVADA /");

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP; webRequest.UserAgent =" Mozilla / 4.0(兼容; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.5.21022;" ;;)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; webRequest.ContentType = QUOT;应用/ X WWW的窗体-urlencoded英寸;

&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; webRequest.ContentLength = postdata.Length;

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;使用(流作家= webRequest.GetRequestStream())

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;     writer.Write(postdata,0,postdata.Length);
$


         ;&NBSP;&NBSP;&NBSP;使用(HttpWebResponse WebResponse类=(HttpWebResponse)webRequest.GetResponse())

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ; {

        &nb属;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; //我们需要向我们的cookie容器添加任何响应cookie

                ; cookies.Add(webResponse.Cookies);
$


               ;&NBSP;&NBSP; //仅用于调试

               使用(VAR流=新的StreamReader(webResponse.GetResponseStream()))

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; System.Diagnostics.Debug.WriteLine(stream.ReadToEnd());



&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; return(webResponse.StatusCode == HttpStatusCode.OK);

            }
        }


然而,会话 不会出现
私人 网络访问 有谁知道
我是 做错了或 可以指导我
$


我是使用 ASP.Net MVC 3.0



非常感谢 提前



Jose < /跨度> <跨度ID = "x_x_result_box" LANG = "EN"> <跨度>

解决方案
尝试在forums.asp.net上的ASP.Net MVC论坛。


Hi all,

My case is: I have two sites, one with access to customers (private) and a public. I need to be able to login from the public to the private site. To do this I added the appropriate fields (user and password) and I send it with a POST operation to the private site as follows:

  CookieContainer cookies = new CookieContainer();

                //Request login page to get a session cookie
                GETHtml(returnUrl, cookies, returnUrl);

                //Now we can do login
                Login(model.UserName, model.Password, cookies, returnUrl);
                return Redirect(@"http://privada/");

        public string GETHtml(string url, CookieContainer cookies, string returnUrl)
        {
            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
            webRequest.CookieContainer = cookies;
            webRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.5.21022;";
            webRequest.Referer = returnUrl;
            
            using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
            {
                //We need to add any response cookies to our cookie container           
                cookies.Add(webResponse.Cookies);

                using (var stream = new StreamReader(webResponse.GetResponseStream()))
                    return stream.ReadToEnd();
            }
        }


        public bool Login(string Username, string Password, CookieContainer cookies, string returnUrl)
        {
            string poststring = string.Format("UserName={0}&Password={1}&btn-acceder.x=63&btn-acceder.y=13&btn-acceder=login",
                                        Username, Password);
            byte[] postdata = Encoding.UTF8.GetBytes(poststring);

            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(returnUrl);
            webRequest.CookieContainer = cookies;
            webRequest.Method = "POST";
            webRequest.Referer = returnUrl;
            webRequest.Headers.Add("origin", @"http://privada/");
            webRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.5.21022;";
            webRequest.ContentType = "application/x-www-form-urlencoded";
            webRequest.ContentLength = postdata.Length;
            using (Stream writer = webRequest.GetRequestStream())
                writer.Write(postdata, 0, postdata.Length);

            using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
            {
                //We need to add any response cookies to our cookie container
                cookies.Add(webResponse.Cookies);

                //Only for debug
                using (var stream = new StreamReader(webResponse.GetResponseStream()))
                    System.Diagnostics.Debug.WriteLine(stream.ReadToEnd());

                return (webResponse.StatusCode == HttpStatusCode.OK);
            }
        }

However, the session does not appear with private Web access. Does anyone know what I'm doing wrong or can guide me?

I am using ASP.Net MVC 3.0

Thank you very much in advance,

Jose

解决方案

Try the ASP.Net MVC forum on forums.asp.net.


这篇关于从外部站点登录(ASP.NET MVC 3.0)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆