@ thinkzig의 솔루션을 약간 다른 방식으로 사용해도 끝났습니다. MVC Futures 어셈블리의 FileContent를 사용하여 방금 이미지를 처리 할 다른 경로를 추가했습니다.
public ActionResult Image(string id, string image)
{
string articlePath = Server.MapPath("~/views/article/");
string filePath = Path.Combine(articlePath, string.Format("{0}/{1}", id, image));
return this.File(filePath, "image");
}
내가 싸워야했다 다른 하나의 작은 일이 있었다 :
routes.MapRoute("Image", "article/{id}/{image}", new { controller = "Article", action = "Image" });
routes.MapRoute("Article", "article/{id}", new { controller = "Article", action = "Index" });
이 새로운 액션 메소드
는 단순히은 articleID 및 이미지 이름을 기준으로 파일 경로를 구성한다. 사용자가
슬래시 (
http://localhost/article/8AB98
)없이 액세스하면 브라우저는 articleID가 파일이라고 생각하고 이미지 틀린 폴더 (
http://localhost/article/img.png
)를 찾으려고 시도합니다.
감사하게도, mvc는 요청을 이미지 작업 이름 "id"매개 변수로 라우팅하므로 단순히 "."을 찾을 수 있습니다. id를 입력 한 다음 일반 이미지 작업을 사용하여 처리하십시오. ID와 파일 이름
private ActionResult RedirectToImage(string id)
{
if (Request.UrlReferrer == null)
{
return Content("invalid request");
}
var referrer = Request.UrlReferrer.ToString();
if (referrer.Contains("?"))
{
referrer = referrer.Split('?')[0];
}
var realId = Path.GetFileName(referrer);
return this.Image(realId, id);
}
당신은 내가의 URL 참조 자에 의존하고 있습니다 것을 파악
if (id.Contains("."))
{
return RedirectToImage(id);
}
그리고 다음 redirecttoimage 코드 : 문서 작업에
실제 기사 ID를 얻으십시오. 사용자가 이미지를 마우스 오른쪽 버튼으로 클릭하여 (슬래시없이 볼 때) "새 탭에서 이미지 열기"를 선택하면 기사 ID가 무엇인지 알 수 없으므로 "유효하지 않은 요청" 문자열을 사용자에게 보냅니다. 그 상황에서 그 사용자를 지원하려고하지는 않았으므로 괜찮습니다 .-)
정확히 두 옵션을 사용하지 않았지만 이것이 궁극적으로 해결 된 해결책이었다. 질문에 대한 다른 대답을 세부 정보로 게시 할 것입니다. –