2012-03-28 5 views
0

Я пытаюсь создать общую операцию экспорта в mvc. поэтому я написал для этого контроллер.Получить данные от контроллера в другом контроллере

[AcceptVerbs(HttpVerbs.Post)] 
public string Excel(FormCollection collection) 
{ 
    string dataUrl = collection["dataUrl"]; 
    string filter = collection["filter"]; 
    //Get data from dataUrl 
    ... 
} 

Моя проблема, я хочу, чтобы получить данные, которые будут переданы от другого контроллера, передавая тот же параметр на метод с помощью POST.

это метод выборки для данных

[AcceptVerbs(HttpVerbs.Post)] 
public JsonResult List(FormCollection collection) 
{ 
    ... 
    return Json(data); 
} 

спасибо заранее.

+0

Зачем вам это нужно? Почему бы не иметь эту логику в другом классе и назвать ее с обоих контроллеров? – ivowiblo

+0

У меня есть много контроллеров и не хочу вносить в него все изменения. –

+0

Предполагая, что вы находитесь на MVC3, другое предложение (хотя не на 100% связано с вопросом) состоит в том, чтобы прекратить использование FormCollections и использовать средство привязки модели по умолчанию и использовать объекты реального домена из вашего решения. Это облегчит вам больше, чтобы иметь другой класс обслуживания/утилиты для фактического экспорта и иметь меньше кода в контроллере. – Uchitha

ответ

1

Почему бы не реорганизовать код экспорта в класс утилиты, а затем использовать его с обоих контроллеров?

0

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

public void CallController() 
    { 
     var request = (HttpWebRequest)WebRequest.Create("http://yoursite.com/Excel"); 
     request.Method = "POST"; 

     using (var dataStream = request.GetRequestStream()) 
     { 
      //write your data to the data stream 
      using (var response = (HttpWebResponse)request.GetResponse()) 
      { 
       if (response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.TemporaryRedirect) 
       { 
        //work with the controller response 
       } 
      } 
     } 
    } 

Это очень неэффективно, если вы можете реорганизовать код в класс внешнего по отношению к обоим контроллерам.

+0

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

+0

Выставлять свой контроллер как метод post без представления и не получать метод. Затем вы можете удалить аутентификацию вокруг своего метода. – BentOnCoding

+0

Вы могли бы выполнить какое-либо рукопожатие безопасности токена, если вы действительно беспокоились о том, чтобы разоблачить метод контроллера без аутентификации, но это выходит за рамки этого вопроса. – BentOnCoding