C# 用C语言从PHP页面下载文件#

C# 用C语言从PHP页面下载文件#,c#,php,C#,Php,好的,我们有一个PHP脚本,它从一个文件创建一个下载链接,我们希望通过C#下载该文件。这在progress等中可以正常工作,但是当PHP页面出现错误时,程序会下载错误页面并将其保存为请求的文件。这是我们的atm代码: PHP代码: <?php $path = 'upload/test.rar'; if (file_exists($path)) { $mm_type="application/octet-stream"; header("Pragma

好的,我们有一个PHP脚本,它从一个文件创建一个下载链接,我们希望通过C#下载该文件。这在progress等中可以正常工作,但是当PHP页面出现错误时,程序会下载错误页面并将其保存为请求的文件。这是我们的atm代码:

PHP代码:

<?php
$path = 'upload/test.rar';

    if (file_exists($path)) {
        $mm_type="application/octet-stream";
        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header("Content-Type: " . $mm_type);
        header("Content-Length: " .(string)(filesize($path)) );
        header('Content-Disposition: attachment; filename="'.basename($path).'"');
        header("Content-Transfer-Encoding: binary\n");
        readfile($path); 
        exit();
    } 
    else {
    print 'Sorry, we could not find requested download file.';
    }
?>

您应该使用PHP中的
Header
函数,而不是打印错误消息

由于异步调用的性质,不会引发
WebException
。在DownloadFileCompleted回调中,您可以检查

if(e.Error != null)

您的e.Error将包含一行类似于
“远程服务器返回错误:(404)找不到。”

您需要通知webclient,设置标题时会发生错误,就像成功下载时一样。我不太熟悉PHP,但找到了一个401示例

header('HTTP/1.0 401 Unauthorized', true, 401);

是否无法获得类似的内容,获取自定义打印消息,而不是显示默认的异常标题?因为我们将植入更多的自定义异常。您的状态消息和您尝试传输的数据之间可能会发生冲突。通过标题应该可以保证
WebException
,然后您可能会有第二个
header
调用来设置消息?嗯,您能给我举个例子吗?我以前从未这样做过:(.很遗憾,我也是,但根据文档,您的
WebException
将有一个
StatusCode
和一个
StatusDescription
,您可能可以尝试更改部件avec 404,看看是否可以将其作为描述。否则,由于它是您自己的工具,因此您不限于标准错误代码a Browser必须支持HTTP,您可能可以使用自己的(虽然
404
未找到文件而闻名)经过一些本地测试,我编辑了我的答案,希望这对您更有用
if(e.Error != null)
header('HTTP/1.0 401 Unauthorized', true, 401);