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

만든 사람 Tom FitzMackenby Tom FitzMacken

이 문서에서는 Razor (ASP.NET 웹 페이지)를 사용 하 여 작업할 때 발생할 수 있는 문제 및 제안 된 몇 가지 솔루션을 설명 합니다.This article describes issues that you might have when working with ASP.NET Web Pages (Razor) and some suggested solutions.

소프트웨어 버전Software versions

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

이 자습서는 ASP.NET 웹 페이지 2 및 ASP.NET 웹 페이지 1.0 에서도 작동 합니다.This tutorial also works with ASP.NET Web Pages 2 and ASP.NET Web Pages 1.0.

이 항목에는 다음과 같은 섹션이 포함되어 있습니다.This topic contains the following sections:

일반적인 질문은 ASP.NET 웹 페이지 (Razor) FAQ를 참조 하세요.For general questions, see ASP.NET Web Pages (Razor) FAQ.

페이지 실행 문제Issues with Running Pages

여러 가지 문제로 인해 . cshtml. t o l s 페이지가 제대로 실행 되지 않을 수 있습니다.A variety of issues can prevent .cshtml and .vbhtml pages from running properly. 이 섹션에는 일반적인 오류 메시지 및 가능한 원인이 나와 있습니다.This section lists common error messages and likely causes.

HTTP 오류 403-사용 권한 없음: 액세스가 거부 되었습니다.HTTP Error 403 - Forbidden: Access is denied

제공한 자격 증명을 사용 하 여이 디렉터리 또는 페이지를 볼 수 있는 권한이 없습니다.You do not have permission to view this directory or page using the credentials that you supplied.

이 오류는 서버에서 올바른 버전의 .NET Framework를 실행 하지 않는 경우에 발생할 수 있습니다.This error can occur if the server is not running the correct version of the .NET Framework. 서버를 실행 하는 컴퓨터 (로컬 또는 원격)에 적어도 .NET Framework 4가 설치 되어 있는지 확인 합니다.Make sure that the computer that's running the server (locally or remotely) has at least the .NET Framework 4 installed. 또한 응용 프로그램 자체가 올바른 버전을 실행 하도록 구성 되었는지 확인 합니다.Also make sure that the application itself is configured to run the right version.

WebMatrix에서 작업 하는 동안이 문제가 로컬로 표시 되 면 사이트 작업 영역을 클릭 한 다음 Treeview에서 설정을 클릭 합니다.If you see this problem locally while working in WebMatrix, click the Site workspace, and then in the treeview click Settings. .NET Framework 버전 선택 목록에서 .Net 4 (통합) 를 선택 합니다.In the Select .NET Framework Version list, select .NET 4 (Integrated). 이 버전이 이미 설정 되어 있는 경우 관리자 권한으로 WebMatrix를 실행 해 보세요.If this version is already set, try running WebMatrix as an administrator.

웹 사이트의 루트에 하나 이상의 cshtml 파일이 있는지 확인 합니다.Make sure that the root of your website has at least one .cshtml file in it.

웹 서버가 원격 서버에 있는 경우이 오류가 표시 되 면 서버 관리자에 게 문의 하십시오.If you see this error when the web server is on a remote server, contact the server administrator. 서버에 .NET Framework 4 이상이 설치 되어 있는지 확인 합니다.Make sure that the server has the .NET Framework 4 or later installed. 또한 해당 버전의 the.NET Framework를 사용 하도록 구성 된 응용 프로그램 풀에서 응용 프로그램이 실행 되 고 있는지 확인 합니다.Also make sure that the application is running in an application pool that's configured to use that version of the.NET Framework.

서버에 대 한 제어 권한이 있는 경우 올바른 버전의 .NET Framework를 실행 하 고 있는지 확인 합니다.If you have control over the server, make sure it's running the correct version of the .NET Framework. aspnet_regiis -iru 명령을 실행 하 여 설치를 복구 해 볼 수도 있습니다.You might also try repairing the installation by running the aspnet_regiis -iru command. 예를 들어 .NET Framework를 설치한 후 IIS를 설치 하는 경우 IIS는 ASP.NET 페이지를 실행 하도록 올바르게 구성 되지 않습니다. 자세한 내용은 ASP.NET Iis 등록 도구 (Aspnet_regiis .exe)를 참조 하세요.(For example, if you install IIS after you install the .NET Framework, IIS will not be correctly configured to run ASP.NET pages.) For more information, see ASP.NET IIS Registration Tool (Aspnet_regiis.exe).

HTTP 오류 403.14-사용할 수 없음HTTP Error 403.14 - Forbidden

웹 서버가이 디렉터리의 내용을 나열 하지 않도록 구성 되어 있습니다.The Web server is configured to not list the contents of this directory.

이 오류는 보호 되는 리소스 (예: web.config 파일) 또는 보호 되는 폴더 (예: 앱_데이터 또는 앱_코드)에 있는 리소스를 요청 하는 경우 발생할 수 있습니다.This error can occur if you request a resource that's protected (like the Web.config file) or that's in a folder that's protected (like App_Data or App_Code).

HTTP 오류 404.17-찾을 수 없음HTTP Error 404.17 - Not Found

요청 된 콘텐츠는 스크립트로 표시 되며 정적 파일 처리기에서 제공 되지 않습니다.The requested content appears to be script and will not be served by the static file handler.

이 오류는 .NET Framework 4 이상을 사용 하도록 서버가 올바르게 구성 되어 있지 않아 @{ } 블록의 코드를 인식 하지 못하는 경우에 발생할 수 있습니다.This error can occur if the server is not configured correctly to use the .NET Framework 4 or later, and therefore does not recognize the code in @{ } blocks. 앞의 HTTP 오류 403-사용 권한 없음: 액세스가 거부됨에 대 한 설명을 참조 하세요.See the description earlier for HTTP Error 403 - Forbidden: Access is denied.

HTTP 오류 404.7-찾을 수 없음HTTP Error 404.7 - Not Found

파일 확장명을 거부 하도록 요청 필터링 모듈이 구성 되어 있습니다.The request filtering module is configured to deny the file extension

이 오류는 서버가 서버에서 명시적으로 차단 된 경우에 발생할 수 있습니다.This error can occur if .cshtml or .vbhtml extensions have been explicitly blocked on the server. 이 문제는 Url이 확장을 포함 하지 않는 경우에도 작동 하지만 . a u 또는 .A symptom of this problem is that URLs work when they do not include the extension, but URLs that include .cshtml or .vbhtml do not work. 가능한 해결 방법은 사이트의 web.config 파일에서 확장을 다시 사용 하도록 설정 하는 것입니다.A possible solution is to re-enable the extensions in the site's Web.config file. 다음 예제에서는 . cshtml 확장명을 사용 하도록 설정 하는 방법을 보여 줍니다.The following example shows how to enable the .cshtml extension.

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

HTTP 오류 404.8-찾을 수 없음HTTP Error 404.8 - Not Found

HiddenSegment 섹션을 포함 하는 URL의 경로를 거부 하도록 요청 필터링 모듈이 구성 되어 있습니다.The request filtering module is configured to deny a path in the URL that contains a hiddenSegment section.

이 오류는 보호 되는 리소스 (예: web.config 파일) 또는 보호 되는 폴더 (예: 앱_데이터 또는 앱_코드)에 있는 리소스를 요청 하는 경우 발생할 수 있습니다.This error can occur if you request a resource that's protected (like the Web.config file) or that's in a folder that's protected (like App_Data or App_Code).

이 유형의 페이지는 제공 되지 않습니다 ('/' 응용 프로그램의 서버 오류).This type of page is not served (Server Error in '/' Application)

HTTP 오류 404.17에 대 한 앞부분의 설명을 참조 하세요.See the description earlier for HTTP Error 404.17.

Razor 코드 문제Issues with Razor code

'Class' 이름이 현재 컨텍스트에 없습니다.The name 'class' does not exist in the current context

이 오류가 표시 되는 이유는 class 도우미를 참조 하지만 도우미가 설치 되어 있지 않기 때문입니다.Often, a reason you see this error is that class references a helper, but the helper is not installed. 예를 들어 도우미를 사용 하려고 하지만 NuGet에서 패키지를 설치 하지 않은 경우이 오류가 표시 됩니다.For example, if you try to use a helper, but if you haven't installed the package from NuGet, you'll see this error. WebMatrix의 갤러리를 사용 하 여 도우미를 찾아서 설치 합니다.Use the Gallery in WebMatrix to find and install the helper.

도우미가 설치 되어 있지만 페이지에서 인식 되지 않는 경우 코드에 using 문 추가를 추가 해 봅니다.If the helper is installed, but the page still doesn't recognize it, try adding add a using statement to the code. using 문에서 도우미가 포함 된 네임 스페이스를 참조 합니다.In the using statement, reference the namespace that includes the helper. 예를 들어, ASP.NET 웹 도우미 패키지에 있는 기본 도우미는 System.Web.Helpers 네임 스페이스에 있습니다.For example, the basic helpers that are in the ASP.NET Web Helpers package are in the System.Web.Helpers namespace. 도우미를 사용 하려는 페이지 맨 위에 다음 줄을 추가 합니다.At the top of the page where you want to use the helper, add this line:

@using Microsoft.Web.Helpers;

보안 및 멤버 자격과 관련 된 문제Issues with Security and Membership

ASP.NET 웹 페이지 (Razor)에서 기본 제공 보안 (멤버 자격) 시스템을 사용 하는 경우 다음과 같은 문제가 발생할 수 있습니다.If you are using the built-in security (membership) system in ASP.NET Web Pages (Razor), you might encounter the following issues.

이 메서드를 호출 하려면 "Membership. Provider" 속성이 "ExtendedMembershipProvider"의 인스턴스여야 합니다.To call this method, the "Membership.Provider" property must be an instance of "ExtendedMembershipProvider"

이 오류는 AspNetSqlMembershipProvider 클래스가 구성 되지 않았음을 나타낼 수 있습니다.This error can indicate that no AspNetSqlMembershipProvider class is configured. 증상은 사이트가 로컬에서 제대로 작동 하지만 호스팅 공급자의 서버에 게시할 때이 오류를 throw 한다는 것입니다. 이 문제에 대 한 한 가지 해결 방법은 사이트의 web.config 파일에 다음을 추가 하 여 명시적 멤버 자격을 명시적으로 사용 하도록 설정 하는 것입니다.(A symptom is that the site works fine locally but throws this error when you publish it to a hosting provider's server.) One fix for this problem is to explicitly enable simple membership by adding the following to the site's Web.config file:

<configuration>

  <!-- other setting -->

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

  <!-- other settings -->

</configuration>

전자 메일 보내기 문제Issues with Sending Email

전자 메일을 보낼 때 발생 하는 문제는 디버깅 하기 어려울 수 있습니다.Problems with sending email can be challenging to debug. 초기 문제는 SMTP 서버에 연결할 수 없다는 것입니다.An initial problem can be that you can't connect to the SMTP server. 연결에 성공 하면 ASP.NET는 메시지를 SMTP 서버에 전달 합니다.If the connection is successful, ASP.NET hands the message off to the SMTP server. 그러나 메시지 자체에는 SMTP 서버에서 메시지를 보내지 못하도록 하는 문제가 있을 수 있습니다.However, there can be problems with the message itself that prevents the SMTP server from sending it.

응용 프로그램에서 전자 메일을 성공적으로 보내지 않는 경우 다음을 시도 합니다.If your application does not successfully send email, try the following:

  • SMTP 서버 이름은 smtp.provider.com 또는 smtp.provider.net와 같은 경우가 많습니다.The SMTP server name is often something like smtp.provider.com or smtp.provider.net. 그러나 호스팅 공급자에 사이트를 게시 하는 경우 해당 지점에서 SMTP 서버 이름이 localhost될 수 있습니다.However, if you publish your site to a hosting provider, the SMTP server name at that point might be localhost. 이 문제는 게시 하 고 사이트를 공급자 서버에서 실행 한 후 SMTP 서버가 응용 프로그램의 관점에서 로컬 일 수 있기 때문에 발생 합니다.This situation occurs because after you've published and your site is running on the provider's server, the SMTP server might be local from the perspective of your application. 서버 이름을 변경 하면 게시 프로세스의 일부로 SMTP 서버 이름을 변경 해야 하는 것일 수 있습니다.This change in server names might mean that you have to change the SMTP server name as part of your publishing process.
  • 포트 번호는 일반적으로 25입니다.The port number is usually 25. 그러나 일부 공급자는 포트 587 또는 다른 포트를 사용 해야 합니다.However, some providers require you to use port 587 or some other port. SMTP 서버의 소유자에 게 사용할 포트 번호를 확인 합니다.Check with the owner of the SMTP server what port number they expect you to use.
  • 올바른 자격 증명을 사용 하는지 확인 합니다.Make sure that you use the right credentials. 호스팅 공급자에 사이트를 게시 한 경우 공급자가 특별히 표시 한 자격 증명을 전자 메일에 사용 합니다.If you've published your site to a hosting provider, use the credentials that the provider has specifically indicated are for email. 이러한 자격 증명은 게시 하는 데 사용 하는 자격 증명과 다를 수 있습니다.These credentials might be different from the credentials you use to publish.
  • 자격 증명이 필요 하지 않은 경우도 있습니다.Sometimes you don't need credentials at all. 개인 ISP를 사용 하 여 전자 메일을 전송 하는 경우 전자 메일 공급자가 이미 자격 증명을 알고 있을 수 있습니다.If you're sending email by using your personal ISP, your email provider might already know your credentials. 게시 한 후 로컬 컴퓨터에서 테스트 하는 경우와 다른 자격 증명을 사용 해야 할 수 있습니다.After you publish, you might need to use different credentials than when you test on your local computer.
  • 전자 메일 공급자가 암호화를 사용 하는 경우 WebMail.EnableSsltrue로 설정 합니다.If your email provider uses encryption, set WebMail.EnableSsl to true.

전자 메일을 보내는 동안 오류가 발생 하는 경우 다음과 같은 표준 ASP.NET 오류 메시지가 표시 될 수 있습니다.If there is an error sending email, you might see a standard ASP.NET error message, which looks like this:

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

다음 예제와 같이 try-catch 블록을 사용 하 여 전자 메일 보내기와 관련 된 문제를 디버그할 수도 있습니다.You can also debug problems with sending email by using a try-catch block, as in the following example. try-catch 블록을 사용 하는 경우 ASP.NET는 표준 오류 메시지를 표시 하지 않습니다.When you use a try-catch block, ASP.NET does not display its standard error messages. 대신 블록의 catch 부분에서 오류를 캡처할 수 있습니다.Instead, you can capture the error in the catch portion of the block.

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에 대 한 적절 한 값으로 대체 합니다.Substitute the appropriate values for your-SMTP-server-name, and so on. 이러한 방식으로 표시 될 수 있는 오류 메시지는 다음과 같습니다.Some of the error messages you might see this way include the following:

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

    또는-or-

    시간이 지난 후 연결 된 파티가 적절 하 게 응답 하지 않거나 연결 된 호스트가 응답 하지 않아 연결을 설정 하지 못하여 연결 하지 못했습니다.A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

    이 오류는 일반적으로 응용 프로그램이 SMTP 서버에 연결할 수 없음을 의미 합니다.This error usually means that the application could not connect to the SMTP server. 서버 이름 및 포트 번호를 확인 합니다.Check the server name and port number.

  • 사서함을 사용할 수 없습니다. 서버 응답: 5.1.0 <someuser@invaliddomain> 발신자가 거부 됨: 발신자 도메인이 잘못 되었습니다.Mailbox unavailable. The server response was: 5.1.0 <someuser@invaliddomain> sender rejected : invalid sender domain

    이 메시지는 From 주소가 올바르지 않거나 누락 된 것을 나타낼 수 있습니다.This message can indicate that the From address is not correct or is missing.

  • 지정 된 문자열이 전자 메일 주소에 필요한 형식이 아닙니다.The specified string is not in the form required for an email address.

    이 오류는 To 또는 From 속성의 값이 전자 메일 주소로 인식 되지 않음을 나타낼 수 있습니다.This error might indicate that the value of the To or From properties are not recognized as email addresses. ASP.NET 전자 메일 주소가 유효한 지, name@domain.com 와 같은 올바른 형식 인지 확인할 수 없습니다.(ASP.NET cannot check that the email address is valid, only that it's in the correct format, like name@domain.com.)

Note

라이브 사이트에 페이지를 게시 하기 전에 오류 (@errorMessage)를 표시 하는 태그를 제거 합니다.Remove the markup that displays the error (@errorMessage) before you publish the page to a live site. 사용자가 서버에서 가져오는 오류 메시지를 볼 수 있도록 하는 것은 좋지 않습니다.It's not a good idea to let users see error messages that you get from a server.

추가 리소스Additional Resources

ASP.NET 웹 페이지(Razor) FAQASP.NET Web Pages (Razor) FAQ

ASP.NET 웹 사이트의 WebMatrix 및 ASP.NET 웹 페이지 포럼WebMatrix and ASP.NET Web Pages forum on the ASP.NET website