我有一个WebApi应用程序,其目的是提供位于应用程序中的音频文件。它们存储在app_data / audio文件夹中。
这是我的检索方法:
public HttpResponseMessage Get(string file)
{
var path = String.Format("{0}{1}", HttpContext.Current.Server.MapPath(@"~/App_Data/Audio/"), file);
try
{
var responseStream = new MemoryStream();
using (Stream fileStream = File.Open(path, FileMode.Open))
{
fileStream.CopyTo(responseStream);
fileStream.Close();
responseStream.Position = 0;
}
var response = new HttpResponseMessage
{
StatusCode = HttpStatusCode.OK,
Content = new StreamContent(responseStream)
};
response.Content.Headers.Add("content-type", "audio/basic");
response.Headers.CacheControl = new CacheControlHeaderValue()
{
Private = true
};
response.Content.Headers.Expires = null;
response.Headers.Pragma.Clear();
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = file
};
return response;
}
catch (Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, e.Message);
}
}
不幸的是,我收到了这个错误:
“拒绝访问路径'F:\ Apps \ AudioServeup \ App_Data \ Audio \ test.pcm'。”
我可以通过将AppPool标识设置为NetworkService,然后提供NetworkService 写入权限 来解决此问题。咦?不知道为什么我会要求,因为默认情况下NetworkService具有读访问权。
有什么想法吗?
谢谢!
答案 0 :(得分:3)
请尝试使用File.OpenRead(
而非File.Open(
,因为这样可确保在打开文件时仅请求读取权限。