2010-08-03 2 views
4

Response.Redirect를 사용하여 사용자를 새 페이지로 리디렉션하지만 쿼리 문자열에 특정 매개 변수가있는 경우에만 페이지를 표시하려고합니다. 그렇지 않으면 HTTP 401 인증 오류 페이지가 표시되기를 원합니다. 그게 끝날 수 있습니까? 그렇다면 어떻게? 그렇지 않다면 왜 안 되겠습니까? 페이지에서HTTP 오류를 던지는 방법?

답변

3

, 당신은 IHttpHandler로 리디렉션 할 수 출력하여 인증 오류 페이지의 내용을 것이며, (401)

public void ProcessRequest(HttpContext context) 
{ 
    context.Response.ContentType = "text/plain"; 
    context.Response.Write("Authentication error"); 
    context.Response.StatusCode = 401; 
} 

당신을 도울 수있는 몇 가지 링크와 같은 MSDN topic for IHttpHandler에 HTTP 상태 코드를 설정합니다 그 HTTP 처리기 란 무엇이며 어떻게 구현할 수 있는지 이해합니다. 가장 중요한 사람은 : 401 상태 코드, 당신은 자신이 IIS를 구성하는 방법을 따라 표시 할 HTML을 추가해야합니다

HTTP Handlers and HTTP Modules Overview

Walkthrough: Creating a Synchronous HTTP Handler

How to: Register HTTP Handlers

+1

그리고 downvote의 이유는 ... –

+1

이 기능이 제대로 작동합니까? 헤더를 확인 했습니까? 편집 : 당신이 맞을 수도 : http://stackoverflow.com/questions/3288797/page-not-rendered-when-sending-statuscode-500-to-the-client 그러나 이것은 여전히 ​​리디렉션입니다. – Codesleuth

+0

@Codesleuth, 실제로 이것은 리디렉션에 따라 달라집니다. 또한 링크 덕분에 IIS7의 세부 사항을 알지 못했습니다. –

2

다음으로 돌아갑니다.

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (String.IsNullOrEmpty(Request.QueryString["RedirectParam"])) 
      Response.StatusCode = 401; 
     else 
      Response.Redirect("redirectpage.html"); 
    } 
0

나는이 작성 후앙의 도움과 다른 사람에 의해 제공되는 답변 ..

나는 단순히이와 함께, 내가 답을 알아 낸 자신을 생각 :

if (Request.Params[param] != nul) 
      { 
       ... 
      } 
      else 
      { 
       Response.ContentType = "text/html"; 
       Response.Write("Authentication error"); 
       Response.StatusCode = 401; 
       Response.End(); 
      } 

간단한! :) 거기에 어떤 잠재적 인 문제가 있으면 알려주십시오!

+0

1 시간 전에 말한 것은 동일하다. 다행히 고치 셨습니다. :) –

+0

그렇지만 새로운 리디렉션 페이지를 만들고 싶지 않았으므로 한 시간 전에 응답에 대해 전혀 몰랐습니다. :디 –

관련 문제