在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 - ?
答案 0 :(得分:0)
是。 IIS应用程序池标识无法访问硬盘上的任何位置。因此,您可以在c:\ inetpub下移动数据,或者访问应用程序池标识权限以访问该目录。以下是应用池标识http://www.iis.net/learn/manage/configuring-security/application-pool-identities
的链接