Asp.net mvc 允许asp.net mvc api调用访问文件
在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调用: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
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/文件夹是网站文件夹结构的一部分,因此应用程序池标识应该已经可以访问文件夹中的文件