ASP.NET 웹 페이지(Razor) 문제 해결 가이드

Tom FitzMacken

이 문서에서는 ASP.NET 웹 페이지(Razor) 작업 시 발생할 수 있는 문제 및 몇 가지 제안된 솔루션에 대해 설명합니다.

소프트웨어 버전

  • ASP.NET 웹 페이지(Razor) 3

이 자습서는 ASP.NET 웹 페이지 2 및 ASP.NET 웹 페이지 1.0에서도 작동합니다.

이 항목에는 다음과 같은 섹션이 포함되어 있습니다.

일반적인 질문은 ASP.NET 웹 페이지(Razor) FAQ를 참조하세요.

페이지 실행 관련 문제

다양한 문제로 인해 .cshtml.vbhtml 페이지가 제대로 실행되지 않도록 방지할 수 있습니다. 이 섹션에서는 일반적인 오류 메시지와 가능한 원인을 나열합니다.

HTTP 오류 403 - 사용할 수 없음: 액세스가 거부됨

제공한 자격 증명을 사용하여 이 디렉터리 또는 페이지를 볼 수 있는 권한이 없습니다.

이 오류는 서버가 올바른 버전의 .NET Framework 실행하지 않는 경우에 발생할 수 있습니다. 서버를 실행하는 컴퓨터(로컬 또는 원격)에 .NET Framework 4 이상이 설치되어 있는지 확인합니다. 또한 애플리케이션 자체가 올바른 버전을 실행하도록 구성되어 있는지 확인합니다.

WebMatrix에서 작업하는 동안 이 문제가 로컬로 표시되는 경우 사이트 작업 영역을 클릭한 다음 트리 보기에서 설정을 클릭합니다. .NET Framework 버전 선택 목록에서 .NET 4(통합)를 선택합니다. 이 버전이 이미 설정된 경우 WebMatrix를 관리자 권한으로 실행해 보세요.

웹 사이트의 루트에 하나 이상의 .cshtml 파일이 있는지 확인합니다.

웹 서버가 원격 서버에 있을 때 이 오류가 표시되면 서버 관리자에게 문의하세요. 서버에 .NET Framework 4 이상이 설치되어 있는지 확인합니다. 또한 해당 버전의 the.NET Framework를 사용하도록 구성된 애플리케이션 풀에서 애플리케이션이 실행되고 있는지 확인합니다.

서버를 제어할 수 있는 경우 올바른 버전의 .NET Framework 실행 중인지 확인합니다. 명령을 실행 aspnet_regiis -iru 하여 설치를 복구할 수도 있습니다. 예를 들어 .NET Framework 설치한 후 IIS를 설치하면 IIS가 ASP.NET 페이지를 실행하도록 올바르게 구성되지 않습니다. 자세한 내용은 ASP.NET IIS 등록 도구(Aspnet_regiis.exe)를 참조하세요.

HTTP 오류 403.14 - 사용할 수 없음

웹 서버는 이 디렉터리의 내용을 나열하지 않도록 구성됩니다.

이 오류는 보호되는 리소스( 예:Web.config 파일)를 요청하거나 보호되는 폴더(예: App_Data 또는 App_Code)에 있는 경우에 발생할 수 있습니다.

HTTP 오류 404.17 - 찾을 수 없음

요청된 콘텐츠는 스크립트로 표시되며 정적 파일 처리기에서 제공되지 않습니다.

이 오류는 서버가 .NET Framework 4 이상을 사용하도록 올바르게 구성되지 않았으므로 블록에서 @{ } 코드를 인식하지 못하는 경우에 발생할 수 있습니다. HTTP 오류 403 - 사용할 수 없음: 액세스가 거부됨에 대한 이전 설명을 참조하세요.

HTTP 오류 404.7 - 찾을 수 없음

요청 필터링 모듈은 파일 확장자를 거부하도록 구성됩니다.

이 오류는 서버에서 .cshtml 또는 .vbhtml 확장이 명시적으로 차단된 경우에 발생할 수 있습니다. 이 문제의 증상은 URL이 확장을 포함하지 않을 때 작동하지만 .cshtml 또는 .vbhtml 을 포함하는 URL은 작동하지 않는다는 것입니다. 가능한 해결 방법은 사이트의 Web.config 파일에서 확장을 다시 사용하도록 설정하는 것입니다. 다음 예제에서는 .cshtml 확장을 사용하도록 설정하는 방법을 보여 줍니다.

<system.webServer>
  <security>
   <requestFiltering>
     <fileExtensions>
       <remove fileExtension=".cshtml" />
       <add fileExtension=".cshtml" allowed="true" />
     </fileExtensions>
    </requestFiltering>
  </security>
</system.webServer>

HTTP 오류 404.8 - 찾을 수 없음

요청 필터링 모듈은 hiddenSegment 섹션이 포함된 URL의 경로를 거부하도록 구성됩니다.

이 오류는 보호되는 리소스( 예:Web.config 파일)를 요청하거나 보호되는 폴더(예: App_Data 또는 App_Code)에 있는 경우에 발생할 수 있습니다.

이 유형의 페이지는 제공되지 않습니다('/' 애플리케이션의 서버 오류)

HTTP 오류 404.17에 대한 이전 설명을 참조하세요.

Razor 코드 관련 문제

이름이 'class'이(가) 현재 컨텍스트에 없습니다.

이 오류가 class 표시되는 이유는 도우미를 참조하지만 도우미가 설치되지 않았기 때문입니다. 예를 들어 도우미를 사용하려고 하지만 NuGet에서 패키지를 설치하지 않은 경우 이 오류가 표시됩니다. WebMatrix의 갤러리를 사용하여 도우미를 찾아 설치합니다.

도우미가 설치되어 있지만 페이지에서 인식할 수 없는 경우 코드에 using 문을 추가해 보세요. 문에서 using 도우미를 포함하는 네임스페이스를 참조합니다. 예를 들어 ASP.NET Web Helpers 패키지에 있는 기본 도우미는 네임스페이스에 System.Web.Helpers 있습니다. 도우미를 사용하려는 페이지 맨 위에 다음 줄을 추가합니다.

@using Microsoft.Web.Helpers;

보안 및 멤버 자격 관련 문제

ASP.NET 웹 페이지(Razor)에서 기본 제공 보안(멤버 자격) 시스템을 사용하는 경우 다음과 같은 문제가 발생할 수 있습니다.

이 메서드를 호출하려면 "Membership.Provider" 속성이 "ExtendedMembershipProvider"의 instance 있어야 합니다.

이 오류는 클래스가 구성되지 않았음을 AspNetSqlMembershipProvider 나타낼 수 있습니다. (사이트가 로컬에서 잘 작동하지만 호스팅 공급자의 서버에 게시할 때 이 오류가 throw되는 증상이 있습니다.) 이 문제에 대한 한 가지 해결 방법은 사이트의 Web.config 파일에 다음을 추가하여 단순 멤버 자격을 명시적으로 사용하도록 설정하는 것입니다.

<configuration>

  <!-- other setting -->

  <appSettings>
    <add key="enableSimpleMembership" value="true" />
  </appSettings>

  <!-- other settings -->

</configuration>

Email 보내기 관련 문제

전자 메일 보내기 문제는 디버그하기 어려울 수 있습니다. 초기 문제는 SMTP 서버에 연결할 수 없다는 것입니다. 연결에 성공하면 ASP.NET 메시지를 SMTP 서버로 끕니다. 그러나 메시지 자체에 문제가 있어 SMTP 서버에서 메시지를 보내지 못할 수 있습니다.

애플리케이션이 전자 메일을 성공적으로 보내지 못한 경우 다음을 시도합니다.

  • SMTP 서버 이름은 종종 또는 smtp.provider.net와 같습니다smtp.provider.com. 그러나 호스팅 공급자에 사이트를 게시하는 경우 해당 시점의 SMTP 서버 이름은 일 수 있습니다 localhost. 이 상황은 게시한 후 사이트가 공급자의 서버에서 실행되고 나면 SMTP 서버가 애플리케이션의 관점에서 로컬일 수 있기 때문에 발생합니다. 서버 이름이 변경되면 게시 프로세스의 일부로 SMTP 서버 이름을 변경해야 할 수 있습니다.
  • 포트 번호는 일반적으로 25입니다. 그러나 일부 공급자는 포트 587 또는 다른 포트를 사용해야 합니다. SMTP 서버 소유자에게 사용할 포트 번호를 확인합니다.
  • 올바른 자격 증명을 사용해야 합니다. 호스팅 공급자에 사이트를 게시한 경우 공급자가 특별히 전자 메일용으로 표시한 자격 증명을 사용합니다. 이러한 자격 증명은 게시하는 데 사용하는 자격 증명과 다를 수 있습니다.
  • 경우에 따라 자격 증명이 전혀 필요하지 않습니다. 개인 ISP를 사용하여 전자 메일을 보내는 경우 전자 메일 공급자가 이미 자격 증명을 알고 있을 수 있습니다. 게시한 후에는 로컬 컴퓨터에서 테스트할 때와 다른 자격 증명을 사용해야 할 수 있습니다.
  • 전자 메일 공급자가 암호화를 사용하는 경우 를 로 true설정합니다WebMail.EnableSsl.

전자 메일을 보내는 동안 오류가 발생하면 다음과 같은 표준 ASP.NET 오류 메시지가 표시될 수 있습니다.

전자 메일에 문제가 있는 경우 오류 메시지 ASP.NET

다음 예제와 같이 블록을 사용하여 try-catch 전자 메일을 보내는 문제를 디버그할 수도 있습니다. 블록을 사용하는 try-catch 경우 ASP.NET 표준 오류 메시지를 표시하지 않습니다. 대신 블록의 부분에서 오류를 캡처할 catch 수 있습니다.

var errorMessage = "";
try {
    // Initialize WebMail helper
    WebMail.SmtpServer = "your-SMTP-server-name";
    WebMail.SmtpPort = 25;   // Or the port you've been told to use
    WebMail.EnableSsl = false;
    WebMail.UserName = "your-login-name";
    WebMail.Password = "your-password";
    WebMail.From = "your-from-address";

    WebMail.Send(to: test-To-address,
        subject: "Test email message",
        body: "This is a debug email message"
    );
}
catch (Exception ex ) {
errorMessage = ex.Message;
}

// Other code or markup here ...

<!-- In markup, add the following -->
@if(!errorMessage.IsEmpty()){
    <p>@errorMessage</p>
}

에 적절한 your-SMTP-server-name값을 대체합니다. 이러한 방식으로 표시될 수 있는 오류 메시지 중 일부는 다음과 같습니다.

  • 메일을 보내지 못했습니다.

    또는

    연결된 주체가 기간 후에 올바르게 응답하지 않아 연결 시도 실패 또는 연결된 호스트가 응답하지 않아 설정된 연결 실패

    이 오류는 일반적으로 애플리케이션이 SMTP 서버에 연결할 수 없음을 의미합니다. 서버 이름 및 포트 번호를 확인합니다.

  • 사서함을 사용할 수 없습니다. 서버 응답: 5.1.0 <someuser@invaliddomain> 보낸 사람 거부: 잘못된 보낸 사람 도메인

    이 메시지는 주소가 From 올바르지 않거나 누락되었음을 나타낼 수 있습니다.

  • 지정된 문자열이 전자 메일 주소에 필요한 형식이 아닙니다.

    이 오류는 또는 From 속성의 값이 To 이메일 주소로 인식되지 않음을 나타낼 수 있습니다. (ASP.NET 이메일 주소가 유효한지 검사 수 없으며 와 같은 name@domain.com올바른 형식으로만 사용할 수 있습니다.

참고

라이브 사이트에 페이지를 게시하기 전에 오류(@errorMessage)를 표시하는 태그를 제거합니다. 사용자가 서버에서 받은 오류 메시지를 볼 수 있도록 하는 것은 좋지 않습니다.

추가 리소스

ASP.NET 웹 페이지(Razor) FAQ

ASP.NET 웹 사이트의 WebMatrix 및 ASP.NET 웹 페이지 포럼