允许asp.net mvc api调用访问文件

时间:2015-10-13 14:10:34

标签: asp.net-mvc api security

在windows 2012服务器上托管的asp.net mvc 5网站中,我在网站文件夹结构(/Files/1.jpg等)的文件夹中有一些静态jpg文件,我想要一个api端点(GetPicture) )能够服务。

api使用身份验证标头中的令牌进行基本身份验证。

在我的开发机器(vs2013,IIS Express)上,api正好提供了jpg文件。

但是,当我在测试/生产服务器上调用api端点(api / v1 / GetPicture / 5)时,我得到了500个http代码(UnauthorizedAccessException)和错误消息:" Access路径xxx被拒绝"。

用户正在api调用中进行身份验证。

api电话:

GET https://app.domain.com/api/v1/GetPicture/5 HTTP/1.1
Host: app.domain.com
Content-Type: application/json; charset=utf-8
Content-Length: 49
Authorization: Token 506b38df-947e-45a8-b2a0-49aa01e9a6f9

api终点:

[Route("GetPicture/{id:int}")]
[HttpGet]
public HttpResponseMessage GetPicture()
{
    ...
    ...
    var result = new HttpResponseMessage(HttpStatusCode.OK);
    var stream = new FileStream(path, FileMode.Open);
    result.Content = new StreamContent(stream);
    result.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/jpeg");
    result.Content.Headers.ContentDisposition = 
        new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") 
        {
            FileName = file.FileName
        };
    return result;
    ...
    ...
}

我猜测: - 它是IIS或文件系统安全设置问题或 - 图片应该移动到App_Data - ?

1 个答案:

答案 0 :(得分:0)

是。 IIS应用程序池标识无法访问硬盘上的任何位置。因此,您可以在c:\ inetpub下移动数据,或者访问应用程序池标识权限以访问该目录。以下是应用池标识http://www.iis.net/learn/manage/configuring-security/application-pool-identities

的链接