C# 将文件发送到Asp.net

C# 将文件发送到Asp.net,c#,asp.net,C#,Asp.net,我正在尝试测试一个可能的应用程序。它是一个ASP.net站点,将在其默认页面中接收xml文件。 客户端将是一个应用程序,它将生成包含该文件的HTTP Post 没有UI参与 我制作了原型Asp.NETWeb应用程序(Framework 4.5.2)和一个Winform应用程序来实现它 我在Winform应用程序中尝试了所有形式的HTTP发布代码,但尽管WebApp default.aspx被命中,但我无法访问有效负载 这包括: 测试应用程序正在读取文件并发布字符串。网页中的StreamRead

我正在尝试测试一个可能的应用程序。它是一个ASP.net站点,将在其默认页面中接收xml文件。 客户端将是一个应用程序,它将生成包含该文件的HTTP Post

没有UI参与

我制作了原型Asp.NETWeb应用程序(Framework 4.5.2)和一个Winform应用程序来实现它

我在Winform应用程序中尝试了所有形式的HTTP发布代码,但尽管WebApp default.aspx被命中,但我无法访问有效负载

这包括:

  • 测试应用程序正在读取文件并发布字符串。网页中的StreamReader在读取Request.InputStream时生成空字符串

  • WebClient.UpLoadFile尝试。Request.Files集合为空

使用Postman和带有参数的POST,StreamReader场景可以正常工作。即 文件主体:“opennode这是一个node closenode”生成一个xml字符串输出

我应该提到,我目前正在使用IDE来托管网页,以防这对行为产生任何影响

考虑到应用程序和站点之间需要自动传输,解决这个问题的正确方法是什么

我通常会提供一个web服务,但网站消费者认为这太过分了,只想用文件点击一个URL

WebClient尝试的应用程序代码如下

 private void OpenFile(string _file)
    {

        // WEBCLIENT TRY
        using (WebClient client = new WebClient())
        {
            client.UploadFile("http://localhost:21726/Default.aspx", _file);
        }


    }
ASP.NET代码“Web客户端接收”如下

 private void ProcessData(HttpRequest request)
    {
        try
        {

            // WEB CLIENT RECEIVE ATTEMPT

                foreach (string f in Request.Files.AllKeys)
                {
                    HttpPostedFile file = Request.Files[f];
                    file.SaveAs("c:\\inetpub\\test\\UploadedFiles\\" + file.FileName);
                }


        catch (Exception ex)
        {

            string message = ex.Message;
            throw;
        }
    }
网页更改为Microsoft Webclient.UploadFile示例(如下)中的示例代码。 行为没有改变。 所以一定是WinApp测试仪

<%@ Import Namespace="System"%>
<%@ Import Namespace="System.IO"%>
<%@ Import Namespace="System.Net"%>
<%@ Import NameSpace="System.Web"%>

<Script language="C#" runat=server>
void Page_Load(object sender, EventArgs e) {

    foreach(string f in Request.Files.AllKeys) {
        HttpPostedFile file = Request.Files[f];
        file.SaveAs("c:\\inetpub\\test\\UploadedFiles\\" + file.FileName);
    }   
}

</Script>
<html>
<head></head>
<body>
<p> Upload complete.  </p>
</body>
</html>

无效页面加载(对象发送方,事件参数e){
foreach(Request.Files.AllKeys中的字符串f){
HttpPostedFile file=Request.Files[f];
file.SaveAs(“c:\\inetpub\\test\\UploadedFiles\\”+file.FileName);
}   
}
上传完成

问题有两个方面: webApp在IDE下显示OK,表示上面的RequestFiles容器中没有文件。 一旦我发布到本地IIS,它就开始向WinApp测试客户端返回错误500。 我们追溯到目录访问权(有趣的是)。我们当时正兴高采烈地尝试向网站之外的位置写信。
因此,在站点中添加了一个上载子目录,并设置了完全权限。 然后将文件写入代码更改为:

foreach(string f in Request.Files.AllKeys)
    {
        //File.Create(@"C:\test1.txt");
        HttpPostedFile file = Request.Files[f];
        file.SaveAs(Server.MapPath("~/Upload/") + file.FileName);
    }

现在一切正常

您应该添加一些代码,说明它不起作用的地方,以及有关它的具体问题。如果没有提供代码,就很难帮助您(如果不是自己编写的话)为Webclient尝试添加代码片段,因为这是首选解决方案。