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

Asp.net mvc 允许asp.net mvc api调用访问文件,asp.net-mvc,api,security,Asp.net Mvc,Api,Security,在windows 2012服务器上托管的asp.net mvc 5网站中,我希望api端点(GetPicture)能够为网站文件夹结构(/files/1.jpg等)中的文件夹中包含一些静态jpg文件 api使用基本身份验证,并在身份验证标头中使用令牌 在我的开发机器(vs2013,IIS Express)上,api可以很好地为jpg文件提供服务 然而,当我在测试/生产服务器上调用api端点(api/v1/GetPicture/5)时,我得到了500 http代码(UnauthorizedAcce

在windows 2012服务器上托管的asp.net mvc 5网站中,我希望api端点(GetPicture)能够为网站文件夹结构(/files/1.jpg等)中的文件夹中包含一些静态jpg文件

api使用基本身份验证,并在身份验证标头中使用令牌

在我的开发机器(vs2013,IIS Express)上,api可以很好地为jpg文件提供服务

然而,当我在测试/生产服务器上调用api端点(api/v1/GetPicture/5)时,我得到了500 http代码(UnauthorizedAccessException)和错误消息:“对路径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_数据中
-是的。IIS应用程序池标识将无法访问硬盘上的任何位置。因此,您可以将数据移动到c:\inetpub下,或授予访问应用程序池标识的权限以访问目录。这里有一个关于应用程序池标识的链接

是。IIS应用程序池标识将无法访问硬盘上的任何位置。因此,您可以将数据移动到c:\inetpub下,或授予访问应用程序池标识的权限以访问目录。这里有一个关于应用程序池标识的链接,/Files/文件夹是网站文件夹结构的一部分,因此应用程序池标识应该已经可以访问文件夹中的文件,/Files/文件夹是网站文件夹结构的一部分,因此应用程序池标识应该已经可以访问文件夹中的文件