ASP.NET Core에 대 한 razor 구문Razor syntax for ASP.NET Core

Rick Anderson, Luke Latham, 및 Taylor MullenBy Rick Anderson, Luke Latham, and Taylor Mullen

Razor은 웹 페이지에 서버 기반 코드를 포함 하는 것에 대 한 태그 구문입니다.Razor is a markup syntax for embedding server-based code into webpages. Razor 구문 Razor 태그, C#, 및 HTML로 이루어져 있습니다.The Razor syntax consists of Razor markup, C#, and HTML. Razor를 일반적으로 들어 있는 파일을 .cshtml 파일 확장명입니다.Files containing Razor generally have a .cshtml file extension.

HTML 렌더링Rendering HTML

기본 Razor 언어 HTML입니다.The default Razor language is HTML. 렌더링 HTML Razor 태그에서이 HTML 파일에서 HTML을 렌더링 하는 방법과 다르지 않습니다.Rendering HTML from Razor markup is no different than rendering HTML from an HTML file. HTML 태그에 배치 하는 경우는 .cshtml Razor 파일을 변경 하지 않고 서버에서 렌더링 됩니다.If you place HTML markup into a .cshtml Razor file, it's rendered by the server unchanged.

Razor 구문Razor syntax

Razor C# 지원 및 사용 하 여는 @ C#으로 HTML에서 전환 기호입니다.Razor supports C# and uses the @ symbol to transition from HTML to C#. Razor C# 식을 계산 하 고 HTML 출력에이 렌더링 합니다.Razor evaluates C# expressions and renders them in the HTML output.

경우는 @ 기호 뒤는 Razor 예약 키워드, Razor 특정 태그에 전환 합니다.When an @ symbol is followed by a Razor reserved keyword, it transitions into Razor-specific markup. 그렇지 않은 경우 일반 C# 식으로 전환 됩니다.Otherwise, it transitions into plain C#.

이스케이프할는 @ Razor 태그에서 기호, 초를 사용 하 여 @ 기호:To escape an @ symbol in Razor markup, use a second @ symbol:

<p>@@Username</p>

코드는 단일 HTML로 렌더링은 @ 기호:The code is rendered in HTML with a single @ symbol:

<p>@Username</p>

HTML 특성 및 전자 메일 주소를 포함 하는 내용을 처리 하지 않습니다는 @ 전환 문자로 기호입니다.HTML attributes and content containing email addresses don't treat the @ symbol as a transition character. 다음 예제에서 전자 메일 주소 Razor 구문 분석 하 여 그대로 유지 됩니다.The email addresses in the following example are untouched by Razor parsing:

<a href="mailto:Support@contoso.com">Support@contoso.com</a>

암시적 Razor 식Implicit Razor expressions

암시적 Razor 식은로 시작 @ C# 코드가 뒤에 오는:Implicit Razor expressions start with @ followed by C# code:

<p>@DateTime.Now</p>
<p>@DateTime.IsLeapYear(2016)</p>

C# 제외 하 고 await 키워드, 암시적 식 공백을 포함 해서는 안 됩니다.With the exception of the C# await keyword, implicit expressions must not contain spaces. C# 문에 명확한 종료 하는 경우 공간 intermingle 수 있습니다.You can intermingle spaces if the C# statement has a clear ending:

<p>@await DoSomething("hello", "world")</p>

명시적 Razor 식Explicit Razor expressions

Razor 식은 명시적으로 구성 될는 @ 균형 잡힌 괄호 기호입니다.Explicit Razor expressions consist of an @ symbol with balanced parenthesis. 지난 주 시간을 렌더링 하려면 다음 Razor 태그 사용 됩니다.To render last week's time, the following Razor markup is used:

<p>Last week this time: @(DateTime.Now - TimeSpan.FromDays(7))</p>

내에서 모든 콘텐츠는 @() 괄호 평가 되 고 출력에 렌더링 합니다.Any content within the @() parenthesis is evaluated and rendered to the output.

일반적으로 이전 섹션에 설명 된 암시적 식, 공백을 포함할 수 없습니다.Implicit expressions, described in the previous section, generally can't contain spaces. 다음 코드에서 1 주일 현재 시간에서 차감 되지 않습니다.In the following code, one week isn't subtracted from the current time:

<p>Last week: @DateTime.Now - TimeSpan.FromDays(7)</p>

코드는 다음과 같은 HTML을 렌더링 됩니다.The code renders the following HTML:

<p>Last week: 7/7/2016 4:39:52 PM - TimeSpan.FromDays(7)</p>

연결 된 식 결과 텍스트에 명시적 식을 사용할 수 있습니다.You can use an explicit expression to concatenate text with an expression result:

@{
    var joe = new Person("Joe", 33);
}

<p>Age@(joe.Age)</p>

명시적 식 없이 <p>Age@joe.Age</p> 전자 메일 주소로 처리 및 <p>Age@joe.Age</p> 렌더링 됩니다.Without the explicit expression, <p>Age@joe.Age</p> is treated as an email address, and <p>Age@joe.Age</p> is rendered. 명시적 식을으로 쓸 때 <p>Age33</p> 렌더링 됩니다.When written as an explicit expression, <p>Age33</p> is rendered.

식 인코딩Expression encoding

C# 식을 문자열로 평가 하는 인코딩된 HTML입니다.C# expressions that evaluate to a string are HTML encoded. C# 식을 계산 하는 IHtmlContent 통해 직접 렌더링 되는 IHtmlContent.WriteTo합니다.C# expressions that evaluate to IHtmlContent are rendered directly through IHtmlContent.WriteTo. C# 식으로 계산 하지는 IHtmlContent 하 여 문자열로 변환 ToString 되 고 렌더링 하는 전에 인코딩된 합니다.C# expressions that don't evaluate to IHtmlContent are converted to a string by ToString and encoded before they're rendered.

@("<span>Hello World</span>")

코드는 다음과 같은 HTML을 렌더링 됩니다.The code renders the following HTML:

&lt;span&gt;Hello World&lt;/span&gt;

HTML은 브라우저에 표시 됩니다.The HTML is shown in the browser as:

<span>Hello World</span>

HtmlHelper.Raw출력 인코딩된 않지만 HTML 태그로 렌더링 합니다.HtmlHelper.Raw output isn't encoded but rendered as HTML markup.

경고

사용 하 여 HtmlHelper.Raw unsanitized 사용자 입력은 보안상 위험 합니다.Using HtmlHelper.Raw on unsanitized user input is a security risk. 사용자 입력에는 악의적인 JavaScript 또는 다른 악용 기법 포함 될 수 있습니다.User input might contain malicious JavaScript or other exploits. 사용자 입력을 정리 하는 것은 어렵습니다.Sanitizing user input is difficult. 사용 하지 않도록 HtmlHelper.Raw 사용자 입력을 사용 합니다.Avoid using HtmlHelper.Raw with user input.

@Html.Raw("<span>Hello World</span>")

코드는 다음과 같은 HTML을 렌더링 됩니다.The code renders the following HTML:

<span>Hello World</span>

Razor 코드 블록Razor code blocks

Razor 코드 블록 시작 @ 묶여 및 {}합니다.Razor code blocks start with @ and are enclosed by {}. 식에서와 달리 C# 코드 블록 내부에서 코드 렌더링 되지 않습니다.Unlike expressions, C# code inside code blocks isn't rendered. 코드 블록 및 뷰의 식에서에서 같은 범위를 공유 및 순서에 정의 됩니다.Code blocks and expressions in a view share the same scope and are defined in order:

@{
    var quote = "The future depends on what you do today. - Mahatma Gandhi";
}

<p>@quote</p>

@{
    quote = "Hate cannot drive out hate, only love can do that. - Martin Luther King, Jr.";
}

<p>@quote</p>

코드는 다음과 같은 HTML을 렌더링 됩니다.The code renders the following HTML:

<p>The future depends on what you do today. - Mahatma Gandhi</p>
<p>Hate cannot drive out hate, only love can do that. - Martin Luther King, Jr.</p>

암시적 변환Implicit transitions

코드 블록에 기본 언어는 C#, 하지만 HTML로 다시 전환할 수 있습니다.The default language in a code block is C#, but you can transition back to HTML:

@{
    var inCSharp = true;
    <p>Now in HTML, was in C# @inCSharp</p>
}

명시적 구분 기호로 분리 된 전환Explicit delimited transition

HTML 렌더링 해야 하는 코드 블록의 하위 섹션을 정의 하려면 코드 감싸기 렌더링 하기 위한 문자 Razor <텍스트 > 태그:To define a sub-section of a code block that should render HTML, surround the characters for rendering with the Razor <text> tag:

@for (var i = 0; i < people.Length; i++)
{
    var person = people[i];
    <text>Name: @person.Name</text>
}

HTML 태그로 묶인 없는 HTML을 렌더링 하려면이 방법을 사용 합니다.Use this approach when you want to render HTML that isn't surrounded by an HTML tag. HTML 또는 Razor 태그가 없는 Razor 런타임 오류가 발생 합니다.Without an HTML or Razor tag, you receive a Razor runtime error.

<텍스트 > 태그에서 콘텐츠를 렌더링할 때 공백을 제어도 유용 합니다.The <text> tag is also useful to control whitespace when rendering content. 사이 있는 내용을는 <텍스트 > 태그를 렌더링 하기 전이나 후에 공백이 없어야 하 고는 <텍스트 > 태그의 HTML 출력에 나타납니다.Only the content between the <text> tags is rendered, and no whitespace before or after the <text> tags appears in the HTML output.

명시적 줄 전환을 @:Explicit Line Transition with @:

코드 블록 안에 줄의 나머지 부분을 HTML로 렌더링, 사용 된 @: 구문:To render the rest of an entire line as HTML inside a code block, use the @: syntax:

@for (var i = 0; i < people.Length; i++)
{
    var person = people[i];
    @:Name: @person.Name
}

없이 @: Razor 런타임 오류 코드에서 발생 합니다.Without the @: in the code, you recieve a Razor runtime error.

제어 구조Control Structures

제어 구조는 코드 블록의 확장입니다.Control structures are an extension of code blocks. 코드 블록 (인라인 C# 태그로 전환)도의 모든 측면은 다음 구조에 적용 됩니다.All aspects of code blocks (transitioning to markup, inline C#) also apply to the following structures.

조건부 @if, else if else, 및@switchConditionals @if, else if, else, and @switch

@if코드를 실행할 때 컨트롤:@if controls when code runs:

@if (value % 2 == 0)
{
    <p>The value was even.</p>
}

elseelse if 필요 하지 않습니다는 @ 기호:else and else if don't require the @ symbol:

@if (value % 2 == 0)
{
    <p>The value was even.</p>
}
else if (value >= 1337)
{
    <p>The value is large.</p>
}
else
{
    <p>The value is odd and small.</p>
}

다음과 같이 switch 문을 사용할 수 있습니다.You can use a switch statement like this:

@switch (value)
{
    case 1:
        <p>The value is 1!</p>
        break;
    case 1337:
        <p>Your number is 1337!</p>
        break;
    default:
        <p>Your number wasn't 1 or 1337.</p>
        break;
}

반복 @for, @foreach, @while, 및 @do 동안Looping @for, @foreach, @while, and @do while

템플릿 기반 HTML 제어 문을 반복을 렌더링할 수 있습니다.You can render templated HTML with looping control statements. 사람 목록이 렌더링 합니다.To render a list of people:

@{
    var people = new Person[]
    {
          new Person("Weston", 33),
          new Person("Johnathon", 41),
          ...
    };
}

다음 반복 문 중 하나를 사용할 수 있습니다.You can use any of the following looping statements:

@for

@for (var i = 0; i < people.Length; i++)
{
    var person = people[i];
    <p>Name: @person.Name</p>
    <p>Age: @person.Age</p>
}

@foreach

@foreach (var person in people)
{
    <p>Name: @person.Name</p>
    <p>Age: @person.Age</p>
}

@while

@{ var i = 0; }
@while (i < people.Length)
{
    var person = people[i];
    <p>Name: @person.Name</p>
    <p>Age: @person.Age</p>

    i++;
}

@do while

@{ var i = 0; }
@do
{
    var person = people[i];
    <p>Name: @person.Name</p>
    <p>Age: @person.Age</p>

    i++;
} while (i < people.Length);

복합@usingCompound @using

C#에서는 using 문을 사용 하는 개체가 삭제 되도록 합니다.In C#, a using statement is used to ensure an object is disposed. Razor, 동일한 메커니즘 추가 콘텐츠를 포함 하는 HTML 도우미 만들기에 사용 됩니다.In Razor, the same mechanism is used to create HTML Helpers that contain additional content. 예를 들어, form 태그를 렌더링 하는 HTML 도우미를 사용할 수 있습니다는 @using 문:For instance, you can utilize HTML Helpers to render a form tag with the @using statement:

@using (Html.BeginForm())
{
    <div>
        email:
        <input type="email" id="Email" value="">
        <button>Register</button>
    </div>
}

범위 수준 작업을 수행할 수도 있습니다 태그 도우미합니다.You can also perform scope-level actions with Tag Helpers.

@trycatch, finally@try, catch, finally

예외 처리는 C# 유사 합니다.Exception handling is similar to C#:

@try
{
    throw new InvalidOperationException("You did something invalid.");
}
catch (Exception ex)
{
    <p>The exception message: @ex.Message</p>
}
finally
{
    <p>The finally statement.</p>
}

@lock

Razor에 임계 섹션 lock 문을 보호 하는 기능이 있습니다.Razor has the capability to protect critical sections with lock statements:

@lock (SomeLock)
{
    // Do critical section work
}

설명Comments

Razor 주석 C# 및 HTML을 지원합니다.Razor supports C# and HTML comments:

@{
    /* C# comment */
    // Another C# comment
}
<!-- HTML comment -->

코드는 다음과 같은 HTML을 렌더링 됩니다.The code renders the following HTML:

<!-- HTML comment -->

Razor 주석 웹 페이지를 렌더링 하기 전에 서버에서 제거 됩니다.Razor comments are removed by the server before the webpage is rendered. Razor를 사용 하 여 @* *@ 를 주석을 구분 합니다.Razor uses @* *@ to delimit comments. 다음 코드 주석 처리 되어, 서버에서 태그를 렌더링 하지 않습니다.The following code is commented out, so the server doesn't render any markup:

@*
    @{
        /* C# comment */
        // Another C# comment
    }
    <!-- HTML comment -->
*@

지시문Directives

Razor 지시문 다음 예약 된 키워드를 사용 하 여 암시적 식으로 표시 됩니다는 @ 기호입니다.Razor directives are represented by implicit expressions with reserved keywords following the @ symbol. 지시문에는 일반적으로 보기를 구문 분석 또는 다른 기능을 활성화 하는 방법을 변경 합니다.A directive typically changes the way a view is parsed or enables different functionality.

Razor 뷰의 코드를 생성 하는 방법을 이해 쉽게 지시문의 작동 방식을 이해 하려면 있습니다.Understanding how Razor generates code for a view makes it easier to understand how directives work.

@{
    var quote = "Getting old ain't for wimps! - Anonymous";
}

<div>Quote of the Day: @quote</div>

코드에서는 클래스에는 다음과 유사한 오류가 생성 됩니다.The code generates a class similar to the following:

public class _Views_Something_cshtml : RazorPage<dynamic>
{
    public override async Task ExecuteAsync()
    {
        var output = "Getting old ain't for wimps! - Anonymous";

        WriteLiteral("/r/n<div>Quote of the Day: ");
        Write(output);
        WriteLiteral("</div>");
    }
}

이 문서의 섹션의 뒷부분에 나오는 보기에 대해 생성 된 Razor C# 클래스 보기 이렇게 생성 된 클래스를 확인 하는 방법에 설명 합니다.Later in this article, the section Viewing the Razor C# class generated for a view explains how to view this generated class.

@using

@using 지시문 추가 하는 C# using 지시문을 생성 된 보기에:The @using directive adds the C# using directive to the generated view:

@using System.IO
@{
    var dir = Directory.GetCurrentDirectory();
}
<p>@dir</p>

@model

@model 지시문 보기에 전달 된 모델의 유형을 지정 합니다.The @model directive specifies the type of the model passed to a view:

@model TypeNameOfModel

개별 사용자 계정으로 ASP.NET Core MVC 응용 프로그램을 만들면는 Views/Account/Login.cshtml 보기 모델 선언이 있습니다.If you create an ASP.NET Core MVC app with individual user accounts, the Views/Account/Login.cshtml view contains the following model declaration:

@model LoginViewModel

생성 된 클래스에서 상속 RazorPage<dynamic>:The class generated inherits from RazorPage<dynamic>:

public class _Views_Account_Login_cshtml : RazorPage<LoginViewModel>

Razor를 노출 한 Model 보기에 전달 된 모델에 액세스 하기 위한 속성:Razor exposes a Model property for accessing the model passed to the view:

<div>The Login Email: @Model.Email</div>

@model 지시문이이 속성의 유형을 지정 합니다.The @model directive specifies the type of this property. 지시문에 지정 된 TRazorPage<T> 보기는 생성 된 클래스에서 파생 합니다.The directive specifies the T in RazorPage<T> that the generated class that your view derives from. 지정 하지 않으면는 @model 지시문의 Model 속성은 형식이 dynamic합니다.If you don't specify the @model directive, the Model property is of type dynamic. 모델의 값은 컨트롤러에서 뷰에 전달 됩니다.The value of the model is passed from the controller to the view. 참조 강력한 형식 모델 및 @model 키워드 자세한 정보에 대 한 합니다.See Strongly typed models and the @model keyword for more information.

@inherits

@inherits 지시문 보기 상속 된 클래스의 모든 권한을 제공 합니다.The @inherits directive gives you full control of the class your view inherits:

@inherits TypeNameOfClassToInheritFrom

다음은 사용자 지정 Razor 페이지 유형:The following is a custom Razor page type:

using Microsoft.AspNetCore.Mvc.Razor;

public abstract class CustomRazorPage<TModel> : RazorPage<TModel>
{
    public string CustomText { get; } = "Gardyloo! - A Scottish warning yelled from a window before dumping a slop bucket on the street below.";
}

CustomText 는 보기에 표시 됩니다.The CustomText is displayed in a view:

@inherits CustomRazorPage<TModel>

<div>Custom text: @CustomText</div>

코드는 다음과 같은 HTML을 렌더링 됩니다.The code renders the following HTML:

<div>Custom text: Gardyloo! - A Scottish warning yelled from a window before dumping a slop bucket on the street below.</div>

사용할 수 없는 @model@inherits 동일한 보기에 있습니다.You can't use @model and @inherits in the same view. 사용할 수 있습니다 @inherits_ViewImports.cshtml 파일을 가져오므로 보기:You can have @inherits in a _ViewImports.cshtml file that the view imports:

@inherits CustomRazorPage<TModel>

다음은 강력한 형식의 뷰의 예입니다.The following is an example of a strongly-typed view:

@inherits CustomRazorPage<TModel>

<div>The Login Email: @Model.Email</div>
<div>Custom text: @CustomText</div>

경우 "rick@contoso.com" 전달 보기 모델에서는 다음과 같은 HTML 태그를 생성 합니다.If "rick@contoso.com" is passed in the model, the view generates the following HTML markup:

<div>The Login Email: rick@contoso.com</div>
<div>Custom text: Gardyloo! - A Scottish warning yelled from a window before dumping a slop bucket on the street below.</div>

@inject

@inject 지시문을 사용 하면 서비스에서 삽입 하 여 서비스 컨테이너 보기에 있습니다.The @inject directive enables you to inject a service from your service container into your view. 참조 뷰로 종속성 주입 자세한 정보에 대 한 합니다.See Dependency injection into views for more information.

@functions

@functions 지시문을 사용 하면 함수 수준 콘텐츠 뷰를 추가할 수 있습니다.The @functions directive enables you to add function-level content to a view:

@functions { // C# Code }

예:For example:

@functions {
    public string GetHello()
    {
        return "Hello";
    }
}

<div>From method: @GetHello()</div> 

코드에서는 다음 HTML 태그를 생성합니다.The code generates the following HTML markup:

<div>From method: Hello</div>

다음 코드는 생성된 된 Razor C# 클래스:The following code is the generated Razor C# class:

using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.Razor;

public class _Views_Home_Test_cshtml : RazorPage<dynamic>
{
    // Functions placed between here 
    public string GetHello()
    {
        return "Hello";
    }
    // And here.
#pragma warning disable 1998
    public override async Task ExecuteAsync()
    {
        WriteLiteral("\r\n<div>From method: ");
        Write(GetHello());
        WriteLiteral("</div>\r\n");
    }
#pragma warning restore 1998

@section

@section 지시어와 함께 사용 되는 레이아웃 HTML 페이지의 서로 다른 부분에 콘텐츠를 렌더링할 뷰를 사용할 수 있도록 합니다.The @section directive is used in conjunction with the layout to enable views to render content in different parts of the HTML page. 참조 섹션 자세한 정보에 대 한 합니다.See Sections for more information.

태그 도우미Tag Helpers

와 관련 된 세 가지 지시문 없는 태그 도우미합니다.There are three directives that pertain to Tag Helpers.

지시문Directive 함수Function
@addTagHelper 태그 도우미 보기를 사용할 수 있도록 합니다.Makes Tag Helpers available to a view.
@removeTagHelper 보기에서 이전에 추가 된 태그 도우미를 제거 합니다.Removes Tag Helpers previously added from a view.
@tagHelperPrefix 태그 도우미 지원 기능이 사용 하 고 명시적 태그 도우미 사용을 확인 하려면 태그 접두사를 지정 합니다.Specifies a tag prefix to enable Tag Helper support and to make Tag Helper usage explicit.

Razor 예약 키워드Razor reserved keywords

Razor 키워드Razor keywords

  • 페이지 (ASP.NET Core 2.0 이상 필요)page (Requires ASP.NET Core 2.0 and later)
  • 함수functions
  • 상속inherits
  • 모델model
  • sectionsection
  • (현재 지원 하지 않는 ASP.NET Core) 도우미helper (Not currently supported by ASP.NET Core)

Razor 키워드로 이스케이프 @(Razor Keyword) (예를 들어 @(functions)).Razor keywords are escaped with @(Razor Keyword) (for example, @(functions)).

C# Razor 키워드C# Razor keywords

  • casecase
  • dodo
  • defaultdefault
  • forfor
  • foreachforeach
  • ifif
  • elseelse
  • 잠금lock
  • switchswitch
  • trytry
  • catchcatch
  • finallyfinally
  • usingusing
  • whilewhile

C# Razor 키워드와 이중 이스케이프 해야 @(@C# Razor Keyword) (예를 들어 @(@case)).C# Razor keywords must be double-escaped with @(@C# Razor Keyword) (for example, @(@case)). 첫 번째 @ Razor 구문 분석기를 이스케이프 합니다.The first @ escapes the Razor parser. 두 번째 @ C# 파서를 이스케이프 합니다.The second @ escapes the C# parser.

Razor에서 사용 하지 않는 예약 된 키워드Reserved keywords not used by Razor

  • 네임스페이스(namespace)namespace
  • 클래스class

보기에 대해 생성 된 Razor C# 클래스 보기Viewing the Razor C# class generated for a view

ASP.NET Core MVC 프로젝트에 다음 클래스를 추가 합니다.Add the following class to your ASP.NET Core MVC project:

using Microsoft.AspNetCore.Mvc.Razor.Extensions;
using Microsoft.AspNetCore.Razor.Language;

public class CustomTemplateEngine : MvcRazorTemplateEngine
{
    public CustomTemplateEngine(RazorEngine engine, RazorProject project) 
        : base(engine, project)
    {
    }
        
    public override RazorCSharpDocument GenerateCode(RazorCodeDocument codeDocument)
    {
        var csharpDocument = base.GenerateCode(codeDocument);
        var generatedCode = csharpDocument.GeneratedCode;

        // Look at generatedCode

        return csharpDocument;
    }
}

재정의 RazorTemplateEngine 와 MVC에서 추가 CustomTemplateEngine 클래스:Override the RazorTemplateEngine added by MVC with the CustomTemplateEngine class:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddSingleton<RazorTemplateEngine, CustomTemplateEngine>();
}

중단점을 설정한는 return csharpDocument 의 문은 CustomTemplateEngine합니다.Set a break point on the return csharpDocument statement of CustomTemplateEngine. 프로그램 실행이 중단점에서 중지 되는 경우의 값을 보려면 generatedCode합니다.When program execution stops at the break point, view the value of generatedCode.

GeneratedCode의 텍스트 시각화 도우미 보기

보기 조회 및 대/소문자 구분View lookups and case sensitivity

Razor 뷰 엔진 뷰에 대 한 대/소문자 구분 조회를 수행 합니다.The Razor view engine performs case-sensitive lookups for views. 그러나 실제 조회는 기본 파일 시스템에 의해 결정 됩니다.However, the actual lookup is determined by the underlying file system:

  • 소스를 기반으로 하는 파일:File based source:
    • 대/소문자 구분 파일 시스템 (예: Windows), 운영 체제에서 실제 파일 공급자 조회는 대/소문자 구분 합니다.On operating systems with case insensitive file systems (for example, Windows), physical file provider lookups are case insensitive. 예를 들어 return View("Test") 일치 하는 항목으로 인해 /Views/Home/Test.cshtml, /Views/home/test.cshtml, 및 기타 대/소문자 구분 변형 합니다.For example, return View("Test") results in matches for /Views/Home/Test.cshtml, /Views/home/test.cshtml, and any other casing variant.
    • 대/소문자 구분 파일 시스템에 (예: Linux, OSX와 EmbeddedFileProvider), 조회는 대/소문자 구분 합니다.On case sensitive file systems (for example, Linux, OSX, and with EmbeddedFileProvider), lookups are case sensitive. 예를 들어 return View("Test") 구체적으로 일치 하는 항목 /Views/Home/Test.cshtml합니다.For example, return View("Test") specifically matches /Views/Home/Test.cshtml.
  • 뷰 미리 컴파일된: ASP.Net 2.0 이상 코어, 미리 컴파일된 뷰를 조회는 대/소문자 구분 모든 운영 체제에 있습니다.Precompiled views: With ASP.Net Core 2.0 and later, looking up precompiled views is case insensitive on all operating systems. 동작은 Windows에서 물리적 파일 공급자의 동작과 동일 합니다.The behavior is identical to physical file provider's behavior on Windows. 미리 컴파일된 뷰를 두 가지 경우에만 다른 경우 조회 명확 하지 않습니다.If two precompiled views differ only in case, the result of lookup is non-deterministic.

개발자는 영역, 컨트롤러 및 작업 이름의 대/소문자를 파일 및 디렉터리 이름의 대/소문자와 일치 하는 것이 좋습니다.Developers are encouraged to match the casing of file and directory names to the casing of area, controller, and action names. 이렇게 하면 배포에 기본 파일 시스템에 관계 없이 해당 뷰를 찾을 수 있습니다.This ensures your deployments will find their views regardless of the underlying file system.