我有Azure Blob存储的WCF REST服务。我不想将我的服务用作流的代理,因此我想将客户端的请求重定向到绝对blob网址,但它会重定向到该文件并尝试直接打开它。当服务器将请求重定向到绝对blob url时,我想要的就是开始下载过程。我尝试过的代码如下:
var sas = blob.GetSharedAccessSignature(new SharedAccessPolicy
{
Permissions = SharedAccessPermissions.Read,
SharedAccessStartTime = DateTime.UtcNow,
SharedAccessExpiryTime = DateTime.UtcNow + TimeSpan.FromMinutes(1)
});
WebOperationContext.Current.OutgoingResponse.ContentType = blob.Properties.ContentType;
WebOperationContext.Current.OutgoingResponse.ContentLength = blob.Properties.Length;
WebOperationContext.Current.OutgoingResponse.Location = blob.Uri.AbsoluteUri+sas;
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Redirect;
P.S。我试图将状态代码更改为Redirect,Moved ..等等,但没有任何变化。
更新 如果我将ContentType更改为application / octet-stream,则会在IE中生成如下结果:
<base64Binary xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
...
</base64Binary>
答案 0 :(得分:1)
this question可能重复。
由于Stive Marx认为无法控制Azure Lbob的“内容处理”标题,因此强制浏览器(IE)无法下载该文件。将内容类型设置为“application / octet-stream”可能会强制某些浏览器下载该文件,而不是打开它,但显然它不适用于IE。