2017-11-01 11 views
0
내가 같은 내 지역 중 하나에 이미지 폴더가

현재 : 이미지를 표시하기 위해 ~/Areas/AreaName/Images/변경/ASP.NET MVC 영역에서 이미지 폴더의 URL을 매핑

그래서, 나는 통해 실행해야합니다 : url.com/Areas/AreaName/Images/Image.jpg

그러나 청결을 위해 URL AreaName/Images/Image.jpg~/Areas/AreaName/Images/Image.jpg의 실제 위치로 라우팅하고 싶습니다.

AreaRegistration에서 어떻게해야합니까? URL 패턴을 컨트롤러/동작 등으로 매핑하는 방법을 알고 있지만 폴더를 다른 위치로 매핑하는 방법은 이해하지 못합니다. 이 상황이 컨트롤러/동작을 포함하지 않고 이미지의 위치 만 포함하기 때문에 처음에는 AreaRegistration을 사용하여 자신을 혼란스럽게 할 수 있습니다.

내가 알 수있는 한, context.MapRoute()에서 수행하려고하는 작업에 과부하가 없습니다.

모든 방향에 만족합니다.

답변

1

기본적으로 파일 요청 (이 경우 Image.jpg)이 오면 IIS는 해당 위치에서 직접 서비스를 제공합니다. MVC 요청 파이프 라인을 통과하지 않습니다. 따라서 경로/URL을 변경하기 위해 코드 설정에서 할 수있는 일은 많지 않습니다.

당신은이 옵션

  1. 이동 지역 이름 (또는 무엇이든 당신이 좋아하는 이름)에 일치되어 당신이 폴더에 구성 할 수 있습니다 응용 프로그램 루트에 정적 컨텐츠를 가지고에 그 참조 그 지역의 전망.

  2. 코드를 통해 이미지를 렌더링하십시오. 이 접근법에서는 파일의 고유 식별자 (예 : 고유 한 파일 이름/ID)를 허용하고 코드를 사용하여 파일을 읽고 FileResult를 반환하는 작업 메서드를 작성할 수 있습니다. 파일을 읽을 코드를 작성하고 있으므로 응용 프로그램에서 어디서나 읽을 수 있습니다. 속성 라우팅을 사용하여이 작업 메서드에 대한 예쁜 (멋진) URL 패턴을 정의 할 수 있습니다. 여기

는 폴더의 이미지를 반환 할 간단한 예이다. 필요할 때마다 자유롭게 개선하고 사용하십시오.

[System.Web.Mvc.Route("Images/{id}/")] 
[System.Web.Mvc.Route("Images/{area}/{id}")] 
public ActionResult GetImage(string id,string area = "") 
{ 
    var webRoot = Path.Combine(Path.Combine("~/Contents/Img/", area), id) + ".png"; 
    return File(webRoot, "image/png"); 
} 

당신은

yourSiteName/Images/billing/logo

처럼 그들을 요청할 수 있습니다, 당신이 (비 지역의 관련 페이지에 대한) ~/Contents/Img 디렉토리에 logo.png라는 이미지를 가지고 가정 및 ~/Contents/Img/Billing청구 지역에 고유 한 또 다른 하나

yourSiteName/Images/logo

MVC 요청 파이프 라인 ()을 통해 요청하는 이미지에 대한 요청을 원하지 않기 때문에 옵션 1로 갈 것입니다 (요청시을 기반으로하는 크기 조정과 같은 응답을 원하는 경우가 아니라면). 또한 IIS 수준의 캐싱도 제공됩니다. 하지만 이봐, 당신의 유스 케이스에 맞는 것을 골라라.

+0

나는 옵션 1처럼 간단한 것을 간과했다고 생각할 수 없다.프로젝트에서 중복 된 폴더 이름에 약간의 혼란이 가중되지만 효율성을 위해이를 희생해야합니다. 감사! – justiceorjustus

+0

사실, 옵션 1은 'url.com'으로 이동할 때 Area의 기본 매핑 된 경로를 정말로 원할 때 '~/AreaName /'아래 이미지를 위해 만든 디렉토리를 탐색하려고한다고 생각하는 문제를 일으 킵니다./AreaName'. 이 주위에 어떤 방법이 있습니까? '/ AreaName/Images /'폴더를 제외하고'~/AreaName /'루트 디렉토리에는 아무 것도 없습니다. – justiceorjustus

+0

옵션 2를 사용하려면 몇 가지 샘플 코드를 추가했습니다. – Shyju