1

基本上我需要从需要 Windows 身份验证的位置提供文件。当然,我不想让我的客户直接处理它,而是想实现一个流程,以便他们可以像在我的服务器上一样简单地下载文件,当然,在他们登录到我的系统之后。这是我到目前为止所拥有的,它似乎无法正常工作:

// Create the request
WebRequest request = HttpWebRequest.Create(button.CommandArgument);
request.Credentials = new NetworkCredential(_username,_password);


// Get the response
WebResponse response = request.GetResponse();
StreamReader responseStream = new StreamReader( response.GetResponseStream());

// Send the response directly to output
Response.ContentEncoding = responseStream.CurrentEncoding;
Response.ContentType = request.ContentType;
Response.Write(responseStream.ReadToEnd());
Response.End();

当我尝试这个时,我可以查看文件,但是编码或内容类型有问题,例如,PDF 将包含 16 个空白页(而不是 16 页文本)。

知道我错过了什么吗?

如果有更好的方式来表达这个问题,请随意更改这个问题的标题

更新: 尝试了下面的两个响应,但没有运气。我现在认为内容类型和编码都可以,但可能身份验证失败?内容长度比实际应该小很多......我是否使用了错误的 Windows 身份验证方法?

4

3 回答 3

1

看起来您在最后一个代码块中发送了错误的内容类型。您发送的是用户原始请求的类型,而不是您检索到的文件的内容类型。改变这个:

Response.ContentType = request.ContentType;

到:

Response.ContentType = response.ContentType;
于 2009-06-22T20:08:46.347 回答
1

取决于你如何/拥有什么。我会做几件事。

Response.Clear()首先要删除可能已呈现的任何内容。

然后我会添加一个标头,设置内容处置并将其作为实际附件发送,而不是仅仅将其写给用户。

于 2009-06-22T20:15:12.573 回答
0

如果您的问题与网络凭据有关,您可能需要尝试不同的方法。如果您授予对网站应用程序池正在使用的身份的 HTTP 访问权限,则可以避免在请求中指定用户名/密码凭据。这也为您提供了额外的好处,即无需将密码存储在某处。

于 2009-06-23T00:25:36.780 回答