0

我的程序的基本思想如下:我有一个网页,在用户提供一些输入后运行 C# 程序。此 C# 程序输出一个字符串,然后将显示在不同的网页上。简而言之,我只想将这个字符串从一个网页传递到另一个网页,然后将其打印到页面上。然而事实证明这是非常困难的。这是我目前的尝试:

private ActionResult CallProgram(string path)
    {
        //some code from calling my C# program
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.CreateNoWindow = false;
        startInfo.UseShellExecute = false;
        startInfo.RedirectStandardOutput = true;
        startInfo.FileName = @"\\WMRILTriageTool\Triage\callRunEXE\callRunEXE.exe";
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.Arguments = "-f " + path + " -d 0 -w 1";

        using (Process exeProcess = Process.Start(startInfo))
        {
            output = exeProcess.StandardOutput.ReadToEnd(); //output saved to string
            exeProcess.WaitForExit();   
        }

        return RedirectToAction("Result?results=output"); //pass output to ActionResult
    }

然后调用此 ActionResult 函数:

    [ValidateInput(false)]
    public ActionResult Result(string results)
    {

        ViewBag.Message = "Results";
        ViewBag.toWrite = results;

        return View();
    }

如您所见,我尝试使用查询字符串,但这不起作用。我得到错误:

“从客户端检测到潜在危险的 Request.Path 值(?)”

为了解决这个问题,我尝试将以下内容放入 Web.config:

<system.web>
<httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" />
<pages validateRequest="false" />
</system.web>

但它不起作用(仍然得到同样的错误)。总而言之,如何将我的字符串从 CallProgram 函数传递到 ActionResult 函数,然后再传递到另一个网页?这个看似简单的程序花费了我比我愿意承认的更长的时间。非常感谢您对此事的任何帮助。谢谢你。

4

3 回答 3

0

我在这里看到了许多问题。首先,我不明白你怎么会得到你得到的错误。这行代码:

return RedirectToAction("Result?results=output")

每次都会重定向到相同的硬编码位置 ( Result?results=output)。我怀疑你认为你正在做更多这样的事情:

return RedirectToAction("Result?results=" + output)

根据返回值,这可能会产生您正在谈论的错误exeProcess.StandardOutput.ReadToEnd()

我还要说,保留您所做的配置更改将是一个巨大的错误。这些是 .NET 中内置的安全防护措施,可防止恶意用户入侵您的网站。如果您在不完全了解自己在做什么的情况下删除它们,您很可能会遇到麻烦。

如果您在查询字符串中显示您尝试传递的字符串,我们可能会为您提供更多帮助。

于 2013-09-02T21:54:06.127 回答
0

您应该考虑使用在页面之间共享信息的视图模型类,而不是使用 url 传递数据。它比你现在的方式安全得多。

您可能需要查看此msdn 教程l。

于 2013-09-02T21:55:32.950 回答
0

将输出作为 URL 传递将有很多限制。您可以在 URL 中作为查询字符串发送的字符数是有限制的,如果您想在 URL 中发送它们,最好执行 URLEncode / URLDecode,这样您就不会遇到任何问题。将值传递给另一个结果的最佳方式是使用 Viewmodel 类。例如

             public class Result
            {
               public string Output;
            }

并将结果实例传递给结果操作。我可以建议的另一种方法是使用TempData,它专门用于这种仅重定向的情况。TempData 与 ViewData 类似,不同之处在于它会针对两个连续的请求持续存在,这使得它对于在两个不同的控制器操作之间传递数据等事情很有用

于 2013-09-03T05:17:53.623 回答