당신은을 IHttpHandler 인터페이스를 구현하는 클래스를 작성해야합니다. 이 동작, 별도의 어셈블리를 일반화하려는 경우,
public class ImageHttpHandler : IHttpHandler
{
//code omitted
public bool IsReusable
{
get
{
return (false);
}
}
public void ProcessRequest(HttpContext context)
{
//GetImageUrl is implemented elsewhere
var imageURL = GetImageUrl(context.Request.Params["URL"]);
//GetImageContentFromDatabase returns a structure with MIMEType and Content properties
var imageData = GetImageContentFromDatabase(imageURL);
if(imageData != null)
{
context.Response.ContentType = imageData.MIMEType;
context.Response.BinaryWrite(imageData.Content);
}
else
{
context.Response.StatusCode = 404;
}
}
}
당신은 당신을 App_Code 디렉터리에이 클래스를 배치 할 수 있습니다 또는 : 이런 식으로 뭔가가 충분합니다.
당신은 다음과 같이 당신의 web.config 파일에서이 핸들러를 참조 할 수 있습니다
<system.web>
<httpHandlers>
<add verb="GET" path="*.imgx" type="ImageHttpHandler"/>
</httpHandlers>
</system.web>
이 모든 클래스 ImageHttpHandler에게 직접 연락해야합니다 확장 imgx와 파일에 대한 요청을 얻을 수 있음을 의미한다.
이것은 Cassini (Visual Studio Development Web Server)와는 잘 작동하지만 IIS 웹 사이트/가상 디렉터리를 추가로 변경해야합니다.
IIS MMC 스냅인으로 이동하여이 디렉터리의 속성에 액세스합니다. "가상 디렉터리"또는 "홈 디렉터리"탭에있는 구성 단추를 찾아야합니다. 일단 거기에 imgx를 응용 프로그램 확장으로 추가하고 실행 파일을 aspnet_isapi.dll로 설정합니다. 이 파일은 내 컴퓨터의 C : \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727에 있습니다. 간단하게 "모든 동사"를 선택하고 "파일 존재 확인"을 선택 취소하십시오.
웹 페이지에서 정의한 하이퍼 링크는 imgx 확장자를 사용해야합니다. 필요에 따라 링크를 "myimage.imgx"또는 "GetImage.imgx? id = XXX"로 정의 할 수 있습니다. 이는 사용자의 요구 사항과 데이터베이스에서 이미지 내용을 검색하는 방법에 따라 다릅니다.
위대한 답변, 감사 데이빗과 Canavar. 이것을 통해 생각한 후에 - 나는 번거 로움을 덜어 주면서 대신 파일 시스템을 사용해야하는지 궁금합니다. –
@rick s : 파일 시스템이 더 쉬울 것이지만 데이터베이스 접근 방식에는 몇 가지 옵션이 있습니다. (1) 네트워크 환경에서 사용 권한에 대해 걱정할 필요가 없습니다. (2) (예 : 이미지 크기 조정, 효과 적용 등) (3) 응답 캐시 설정에 프로그래밍 방식으로 영향을 주어 반복 요청이 사용자 브라우저 캐시에서 제공되는 대신 귀하의 서버. –