2014-02-10 5 views
0

Так как заголовок предлагает, как выполнить HTTP POST на внешний веб-сайт, а также перенаправлять пользователя там? Я ищу что-то похожее на это:Как выполнить HTTP POST и перенаправить пользователя на внешний сайт?

Redirect("MyWebsite.com", HttpAction.POST, new RedirectData(new { item = "itemValue"})); 

Это должно быть сделано в ASP.NET mvc.

EDIT

Такое поведение необходимо осуществить проверку подлинности на внешнем веб-сайте. Алгоритм аутентификации:

  1. Пользователь переходит на веб-страницу, требующую его идентификации.
  2. Веб-страница вызывает веб-службу веб-сайта аутентификации и инициализирует аутентификацию.
  3. Инициализация возвращает идентификатор GUID, который должен быть отправлен на указанный URL (скажем, это «MyWebsite.com»).
  4. Пользователь должен быть перенаправлен на URL-адрес, на который были отправлены данные.

До сих пор мне удалось придумать с этим:

string url = "MyWebsite.com"; 
NameValueCollection formData = new NameValueCollection(); 
formData["ticket"] = Ticket.ticket; 
WebClient webClient = new WebClient(); 
byte[] responseBytes = webClient.UploadValues(url, "POST", formData); 

Response.BinaryWrite(responseBytes); 
Response.Redirect("MyWebsite.com", true); 

Ответ Я получаю это HTML-сайта я должен быть перенаправлен и вопрос - что теперь? Как сообщить браузеру отображать HTML, который я получил через ответ? Если я просто перенаправляюсь на «MyWebSite.com», он выполнит действие GET, которое не то, что я ищу. Выполнение двоичной записи ответа ничего не выполняет - оно просто записывает ответ действия POST на действие, которое я выполняю в настоящее время, - нет перенаправления на «MyWebSite.com».

+0

Вышеупомянутый код не работает для вас? какую ошибку вы получаете? –

+0

Пожалуйста, объясните _why_ вам нужно это сделать. Вы не можете сделать это так, после перенаправления GET всегда выполняется. Однако вы можете создать форму на своем сайте и сделать ее POST на другом веб-сайте, если это позволит. – CodeCaster

ответ

1

.NET поддерживает следующий -

using (var client = new WebClient()) 
    { 
     client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-  urlencoded"; 
     var data = new Person 
     { 
       Name = "Glitch100" 
     } 
     var result = client.UploadString("http://www.website.com/page/", "POST", data); 
     Console.WriteLine(result); 
    } 

WebClient или HttpWebRequest может быть использован на стороне сервера для отправки данных.

Любопытный - в чем причина этого?

Ссылки:

http://msdn.microsoft.com/en-us/library/system.net.webclient(v=vs.110).aspx

POST string to ASP.NET Web Api application - returns null

how to POST data to external URL in MVC4 using server side

+0

Я использую этот метод для отправки данных на другую страницу с помощью кнопки, а не обратной передачи. Я устанавливаю некоторые значения вручную при нажатии кнопки и хочу публиковать эти данные. – djack109

+0

. Затем, если вы хотите сделать это, используйте jQuery и $ .post или что-то еще. Или просто используйте метод post в MVC – JonE

2

Если вы хотите разместить и перенаправлять на внешний сайт, то вы должны просто сделать действие вашей формы идут к тому, что URL напрямую. Нет никакой причины справляться с чем-либо на вашей стороне. Однако, если вы не контролируете внешний сайт или не имеете какой-либо договоренности, чтобы это сделать, это, скорее всего, не сработает. Почти каждая платформа реализует некоторую защиту CSRF для предотвращения такого рода вещей.

Смежные вопросы