Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从另一个控制器中的控制器获取数据_C#_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

C# 从另一个控制器中的控制器获取数据

C# 从另一个控制器中的控制器获取数据,c#,asp.net-mvc,asp.net-mvc-3,C#,Asp.net Mvc,Asp.net Mvc 3,我正在尝试在mvc中构建一个通用的导出操作。所以我为此写了一个控制器 [AcceptVerbs(HttpVerbs.Post)] public string Excel(FormCollection collection) { string dataUrl = collection["dataUrl"]; string filter = collection["filter"]; //Get data from dataUrl ... } 我的问题是,我希望通过

我正在尝试在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);
}

提前感谢。

为什么不将导出代码重构为一个实用程序类,然后从两个控制器中使用它?

假设您必须调用控制器对控制器,您可以像这样使用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
                }
            }
        }
    }

如果您可以将代码重构为两个控制器外部的类,那么这是非常低效的

你为什么需要这个?为什么不在另一个类中使用该逻辑并从两个控制器调用它呢?我有很多控制器,不想对所有控制器进行更改。假设您使用MVC3,另一个建议(尽管与问题没有100%的相关性)是停止使用FormCollections,使用默认模型绑定工具,并使用解决方案中的真实域对象。这将更方便您使用不同的服务/实用程序类进行实际导出,并且控制器中的代码更少。您可以从其他控制器继承,只需调用基本方法。这不太好,但你已经声明不想将其重构为更好的设计(顺便说一句,你的解决方案太耦合了)。我已经尝试过了,应用程序使用表单身份验证,所以这个调用给我登录页面作为响应。顺便说一句,为所有数据方法重构代码并添加另一个控制器方法对我来说不是一个好的解决方案。然后,您可以删除方法周围的身份验证。如果您确实担心在没有身份验证的情况下暴露控制器方法,您可以进行某种令牌安全握手,但这超出了本问题的范围。