WebApi文件读取访问被拒绝

时间:2014-07-25 21:00:28

标签: c# .net

我有一个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具有读访问权。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

请尝试使用File.OpenRead(而非File.Open(,因为这样可确保在打开文件时仅请求读取权限。