2011-01-09 8 views
33

ASP.NET 4.0 및 IIS7에서 HTTP 처리기를 작성 중이므로 파일을 찾을 수없는 조건을 생성해야합니다. Response.Status를 설정하면 "HTTP 상태 문자열이 유효하지 않습니다"예외가 발생합니다.

내가 C#을 2010 년 ASP.Net 4 프로 매튜 맥도날드의 새 책에서 다음 코드를 복사 (응답 변수는 현재 HttpResponse에의 인스턴스입니다.)

response.Status = "File not found"; 
response.StatusCode = 404; 

그러나 나는 것을 발견

response.Status = "404 Not found"; 

을 그리고 모든 WO 것 같다 : 첫 번째 라인은 내가 다음을 사용하여 위의 대신 선으로, 런타임 오류 HTTP status string is not valid.

하는 경우를 생성 괜찮아. 사실, 나는 심지어 그 반응을 본다 .StatusCode는 자동으로 404로 설정된다.

제 문제는 프로덕션 서버에서이 작업을 실패하지 않기 위해서입니다. 그래서 나는 이것을 달성하기위한 "올바른"방법을 이해할 수 있다면 훨씬 나아질 것입니다. 왜 첫 번째 접근 방식이 Mathew McDonald에서 효과가 있었지만 나에게는 그렇지 않은 것입니까? 그리고 두 번째 접근법은 항상 신뢰할 수있을 것입니까?

누구든지 조언을 제공 할 수 있습니까?

답변

56

그 이유는 Status 속성이 메시지뿐만 아니라 클라이언트에 전송 된 완전한 상태 줄이기 때문입니다. 바람직하게는,

response.Status = "404 File not found"; 

을 또는 :

당신은 쓸 수 있습니다, 그 문서에 따르면, HttpResponse.StatusHttpResponse.StatusDescription 찬성되지 않습니다

response.StatusCode = 404; 
response.StatusDescription = "File not found"; 

하는 것으로.

+0

글쎄, 그것은 내가 책에서 얻은 다른 코드가 어떻게 작동하는지에 관해서는 어둠 속에서 여전히 나를 떠난다. –

+8

또한 관심있는 사람이 있으면 StatusCode를 404로 설정하면 StatusDescription이 자동으로 "찾을 수 없음"으로 설정됩니다. 그러나 정확한 규칙이 무엇인지 알기는 어렵습니다 (그리고 앞으로있을 것입니다). StatusCode와 StatusDescription을 모두 설정하는 것이 가장 좋은 방법 일 수 있습니다. –

+1

너무 지나치지 않으려 고하지 않고, 파일이 없다는 이유만으로 URL에 리소스가 없다는 오류의 의도 때문에 "파일을 찾을 수 없음"대신 "찾을 수 없음"이라는 설명을 설정합니다. 디스크에. – Andy

관련 문제