2011-01-06 3 views
10

Один отдел в нашей компании использует классический asp.net, в то время как наш отдел использует MVC.Как я могу получить данные POST от контроллера MVC asp.net на странице без MVC asp.net?

Мы должны передать 5 переменных на его страницу (по форме submit). Может ли кто-нибудь показать простой пример публикации данных формы с контроллера MVC на страницу asp.net, ожидающую переменную формы?

ответ

13

Если я читаю это правильно, вы должны быть в состоянии сделать это без каких-либо проблем с перекрестными доменами/приложениями. Вы хотите сделать это в контроллере, поэтому вы можете использовать класс HttpWebRequest для публикации данных. Это концептуально то же самое, что и публикация в веб-браузере в отношении целевого приложения.

Вот быстрый и грязный сниппет:

// name/value pairs. field names should match form elements 
string data = field2Name + "=" + field1Value + "&" + field2Name+ "=" + field2Value 

HttpWebRequest request = (HttpWebRequest) WebRequest.Create(<url to other applications form action>); 

// set post headers 
request.Method = "POST"; 
request.KeepAlive = true; 
request.ContentLength = data.Length; 
request.ContentType = "application/x-www-form-urlencoded"; 

// write the data to the request stream   
StreamWriter writer = new StreamWriter(request.GetRequestStream()); 
writer.Write(data); 

// iirc this actually triggers the post 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
+0

Это похоже на решение, которое я ищу. Спасибо, я попробую! – Monkey

+2

не забудьте сделать ваш писатель или использовать с помощью (var writer = new StreamWriter (request.GetRequestStream()) { writer.Write (data); } –

0

Если вы пересекаете домены или приложения, я думаю, вам может быть не повезло. Можете ли вы перейти на другой сайт и использовать запрос?

Или напишите на стол и перейдите на другой сайт.

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

+0

Я не могу использовать строку запроса из-за подверженности безопасности, и это слишком просто для пользователей для изменения. Это пересечение доменов. – Monkey

+0

Для перекрестного домена, конвертируйте свой объект в JSON и Serialize Javascript, затем назначьте его ViewBag, если контроллер вернет View или TempData, если он перенаправляет на другой вид. Тогда это то, что я сделал: используйте AngularJS для публикации в WebAPI с включенным CORS. WebAPI может указывать URL-адреса, которые разрешено отправлять на контроллер. @ Html.Raw (TempData ["yourdata"]) можно назначить объекту Javascript, где Angular может опубликовать его в WebAPI. См. Этот ответ: http://stackoverflow.com/a/32769992/1171842. Для классического ASP код, который принимает данные, необходимо портировать в WebAPI. – Yogi

-1

я, возможно, отсутствует тонкую проблему, но вы не можете просто установить action на форму MVC к URL классической страницы жереха, который будет получать Это?

Поля будут доступны в виде заголовков, которые вы можете прочитать на стороне ASP.

Единственная проблема будет заключаться в том, что на сайте ASP есть обнаружение подделки на основе перекрестного запроса (но если это встроенные приложения, вы можете добавить исключение из кода обнаружения подделок на стороне ASP).