Используя MVC2 ActionResult, как я могу перенаправить (Опубликовать) на другой сайт - PullRequest
0 голосов
/ 07 января 2011

У меня есть страница, которая собирает данные и отправляет их на другой сайт.Я мог бы просто добавить URL сайта в действие тега form, но я бы хотел записать информацию в свою базу данных до переключения сайтов.В ActionResult до сих пор у меня есть:

    [HttpPost]
    public ActionResult MyPage(MyPageModel model)
    {
        if (ModelState.IsValid)
        {
            StoreDate(model.fld1, model.fld2)
            var encoding = new ASCIIEncoding();
            var postData = "";
            foreach (String postKey in Request.Form)
            {
                var postValue = Encode(Request.Form[postKey]);
                postData += string.Format("&{0}={1}", postKey, postValue);
            }
            var data = encoding.GetBytes(postData);

            // Prepare web request...
            var myRequest = (HttpWebRequest)WebRequest.Create("https://www.site2.com");
            myRequest.Method = "POST";
            myRequest.ContentType = "application/x-www-form-urlencoded";
            myRequest.ContentLength = data.Length;

            // Send the data.
            Stream newStream = myRequest.GetRequestStream();
            newStream.Write(data, 0, data.Length);
            newStream.Flush();
            newStream.Close();

Кто-нибудь знает, как закончить это и использовать правильную переменную 'return', чтобы это сообщение отправляло данные на другой сайт.

Iотредактировал фрагмент на основе ответа ниже.

Ответы [ 2 ]

0 голосов
/ 07 января 2011

Другим вариантом было бы указать действие формы на другом сайте и сделать запись ajax на ваш сервер перед отправкой формы. Это было бы намного проще, чем играть в "человек посередине" с HttpWebRequest.

0 голосов
/ 07 января 2011

POST уже произошел, поэтому не будет волшебной пули (то есть простой ActionResult), которая будет работать для вас. Поскольку вы обрабатываете POST-ответ на своем сервере, вам необходимо заново создать POST-запрос на целевом сервере. Для этого вам нужно задействовать HttpWebRequest по отношению к этого ответа . После получения ответа от HttpWebRequest вам нужно будет передать этот ответ обратно, вероятно, через ContentResult. В общем, это будет нетривиально, но это возможно.

Обновление : Исходя из вашего фрагмента, я бы попробовал добавить следующее:

WebResponse res = myRequest.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
string returnvalue = sr.ReadToEnd();
return Content(returnValue);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...