|
18 - 사용자 정의 사이트 전체 동작
이 장에서는 단순한 페이지가 아닌, 전체 웹사이트 또는 전체 폴더로 설정을하는 방법을 설명합니다.
무엇을 배우는가 :
1. 웹사이트 시작 코드를 추가
코드의 대부분은 당신이 쓰고 만든 설정의 개별 페이지에 있습니다. 예를 들어, 페이지에서 이메일 메시지를 보낼 경우, 일반적으로 페이지에서 이메일 메시지를 보내기(SMTP 서버) 이메일을 보내기위한 설정을 초기화하기 위해 필요한의 모든 코드가 포함되어 있습니다.
하지만 일부의 경우에, 개별 페이지가 실행되기 전에 몇 가지 코드를 실행할 수도 있습니다. 이것은 예를 들어, 이메일 설정 또는 계정 키 같은 값를 제공하기 위한 필요에 어디서나 사용할 수있는 전역값(referred to as global values:전역값 참조)을 설정하는 데 유용합니다. 그리고 전역값에 이러한 설정을 유지하는 것이 편리할 수 있습니다.
사이트의 루트에 _AppStart.cshtml라는 페이지를 생성하여이 작업을 수행할 수 있습니다. 이 페이지가 존재하는 경우, 사이트의 모든 페이지에서 처음 요청이 실행됩니다. 따라서 글로벌 값을 설정하는 코드를 실행할 수있는 좋은 장소입니다. (사용자가 직접 요청해도 _AppStart.cshtml는 접두사 밑줄 있기 때문에 ASP.NET은 브라우저에 페이지를 전송하지 않습니다.)
다음 그림은 어떻게 _AppStart.cshtml 페이지 작동하는지 보여줍니다. 페이지에 요청이 왔을 때, 그것은 요청된 사이트의 어떤 페이지의 첫 번째 실행입니다. 그러므로 그것은 전역값 세팅에 좋은 장소입니다.
1. 웹사이트를위한 글로벌 값을 설정
@{ AppState["customAppName"] = "Application Name"; } |
<!DOCTYPE html> <html> <head> <title>Show Application Name</title> </head> <body> <h1>@AppState["customAppName"]</h1> </body> </html> |
2. 헬퍼에 대한 값 설정
_AppStart.cshtml 파일에 사용하여 좋은점은 사이트에서 사용하고 초기화해야할 헬퍼에 대한 값을 설정하는 것입니다. 완벽한 예제는 귀하 reCAPTCHA 계정에 대한 공개 및 비공개 키를 지정하는 데 필요한 ReCaptcha 도우미입니다. 대신에 당신은 ReCaptcha 도우미를 사용하려면 각 페이지에서 이러한 키를 설정, 당신은 _AppStart.cshtml 한 번 그들을 설정할 수 있습니다 그럼 그들은 이미 귀하의 사이트에있는 모든 페이지에 대한 준비. 보안 및 회원 추가 - 당신이 장 16에서 본 것처럼 _AppStart.cshtml에서 설정할 수 있습니다 기타 값, SMTP 서버를 사용하여 이메일을 보내기위한 설정입니다.
이 절차는 어떻게 전세계 ReCaptcha 키를 설정을 보여줍니다. (ReCaptcha 도우미 사용에 대한 자세한 내용은 16 장 참조 - 보안 및 회원 추가.)
1.Add ASP.NET 웹 Helpers를 라이브러리 당신이하지 않은 경우 이미 그것을 추가로 1 장에서 설명하는 귀하의 웹사이트에.
당신 2.If이 ReCaptcha.Net (http://recaptcha.net)에서 귀하의 웹사이트를 등록, 이미하지 않았습니다. 당신은 등록을 완료한 후, 당신은 공개 키 및 개인 키를 가져 올게.
3.If 이미 _AppStart.cshtml라는 파일을 만들어 웹 사이트의 루트 폴더에, _AppStart.cshtml 파일이 없습니다.
4.Replace 다음 코드로 _AppStart.cshtml 파일의 기존 코드 :
@ {
/ / 공개와 함께 PublicKey과 PrivateKey 문자열을 추가
/ /와 키 전용. 구하는 당신의 PublicKey 및 PrivateKey
/ / ReCaptcha.Net (http://recaptcha.net) 웹 사이트에서.
ReCaptcha.PublicKey는 = "";
ReCaptcha.PrivateKey는 = "";
} 5.Set 고객님의 공개 및 비공개 키를 사용하여 PublicKey과 PrivateKey 속성.
_AppStart.cshtml 파일을 6.Save하고 닫습니다.
웹사이트의 7.In 루트 폴더는 Recaptcha.cshtml라는 새 페이지를 만들 수 있습니다.
8.Replace 기본 마크업과 코드를 다음과 같이 :
@ {
var에 showRecaptcha = 진정한;
(IsPost 경우) {
(() ReCaptcha.Validate 경우) {
@ : 귀하의 응답은 통과!
showRecaptcha = false를;
}
또 {
@ : 귀하의 응답은 통과하지 않았어!
}
}
}
<! DOCTYPE html로>
<html>
를 <head>
<제목 테스트 글로벌 Recaptcha 키 </ 제목>
</ 머리>
<body> 태그
<form action="" method="post">
@ 경우 (showRecaptcha == 사실) {
(ReCaptcha.PrivateKey! = "") {면
<p> @ ReCaptcha.GetHtml () </ 피의>
<input type="submit" value="Submit" />
}
또 {
<p> 당신은 귀하의 공개 및 비공개 키를 얻을 수 있습니다
ReCaptcha.Net 웹사이트 (http://recaptcha.net).
그런 다음 _AppStart.cshtml 파일에 키를 추가합니다. </ 피의>를
}
}
</ 폼>
</ 몸>
</ html로> 9.Run 브라우저에서 Recaptcha.cshtml 페이지. PrivateKey 값이 유효한 경우, 페이지가 reCAPTCHA 컨트롤과 단추가 표시됩니다. 당신은 _AppStart.html에 전세계 열쇠를 설정하지 않았다면, 페이지가 오류를 표시합니다.
테스트에 대한 단어를 10.Enter. 당신이 reCAPTCHA 시험을 통과하면, 그 효과에 대한 메시지가 표시하고, 그렇지 않으면 당신은 오류 메시지와 reCAPTCHA 컨트롤이 redisplayed입니다 참조하십시오.
전에 폴더에있는 파일 후 코드를 실행
당신은 사이트의 페이지를 실행하기 전에 코드를 작성 _AppStart.cshtml를 사용할 수처럼, 당신은 실행 코드를 작성하기 전에 (그리고 이후) 특정 폴더에서 실행하는 페이지입니다. 이것은, 또는 사용자가 폴더에서 페이지를 실행하기 전에 로그 인한 것을 확인하기 위해 폴더에있는 모든 페이지에 대해 동일한 레이아웃 페이지를 설정 같은 것들에 유용합니다.
특정 폴더의 페이지에, 당신은 _PageStart.cshtml라는 파일에 코드를 만들 수 있습니다. 다음 그림은 어떻게 _PageStart.cshtml 페이지 작품을 보여줍니다. 요청 페이지에 오면 _AppStart.cshtml 페이지에 대해 ASP.NET 첫번째 검사하고 그 실행됩니다. 그런 다음 ASP.NET은, _PageStart.cshtml 페이지가 있는지, 그리고있다면 그 수표를 실행합니다. 그런 다음 요청한 페이지를 실행합니다.
_PageStart.cshtml 페이지 안에, 당신은 처리하는 동안 당신이 RunPage 메서드를 포함하여 실행하도록 요청한 페이지를 원하는 위치를 지정할 수 있습니다. 이것은 요청한 페이지가 실행되기 전에 코드를 실행하고 다시 그것 후 수 있습니다. 당신이 RunPage, _PageStart.cshtml의 실행에있는 모든 코드는 다음을 포함하지 않는 경우 요청한 페이지가 자동으로 실행됩니다.
ASP.NET은 당신 _PageStart.cshtml 파일의 계층 구조를 만들 수 있습니다. 당신은 사이트의 루트와 모든 하위 폴더에 _PageStart.cshtml 파일을 넣을 수 있습니다. 페이지가 요청되면, 최상위 가장 수준 (사이트 루트에 가까운) 등 하위 폴더 구조 아래에있는 다음 하위 폴더에있는 _PageStart.cshtml 파일에 의해 다음 실행에서 _PageStart.cshtml 파일은 요청에 도달할 때까지 폴더되는 요청한 페이지가 포함되어 있습니다. 모든 해당 _PageStart.cshtml 파일이 실행되면, 요청한 페이지가 실행됩니다.
예를 들어, 당신은 _PageStart.cshtml 파일과 default.cshtml 파일의 다음과 같은 조합을 가지고 있습니다 :
@ * ~ / _PageStart.cshtml * @
@ {
PageData [ "Color1"] = "빨강";
PageData [ "Color2"] = "블루";
}
@ / _PageStart.cshtml * * ~ / myfolder @
@ {
PageData [ "Color2"] = "경고";
PageData [ "Color3"] = "그린";
}
@ / default.cshtml * * ~ / myfolder @
@ PageData [ "Color1"]
<br/>
@ PageData [ "Color2"]
<br/>
당신이 default.cshtml 실행 @ PageData [ "Color3"], 당신은 다음을 참조합니다 :
빨강
황색
녹색
폴더에있는 모든 페이지에 대해 실행하는 초기화 코드
_PageStart.cshtml 파일에 대한 좋은 사용은 하나의 폴더에있는 모든 파일에 대해 동일한 레이아웃 페이지를 초기화하는 것입니다.
1.In 루트 폴더, InitPages라는 이름의 새 폴더를 만듭니다.
귀하의 웹사이트 2.In InitPages 폴더, _PageStart.cshtml라는 파일을 생성하고 다음과 같은 기본 마크업과 코드를 교체 :
@ {
/ / 설정 폴더에있는 모든 페이지의 레이아웃 페이지입니다.
레이아웃 = "~ / Shared/_Layout1.cshtml";
/ / 설정 변수 폴더에있는 모든 페이지에 사용할 수 있습니다.
PageData [ "MyBackground"] = "경고";
} 3.In 웹사이트의 루트, 공유라는 이름의 폴더를 만듭니다.
4.In 공유 폴더, _Layout1.cshtml라는 파일을 생성하고 다음과 같은 기본 마크업과 코드를 교체 :
@ {
var에 backgroundColor = PageData [ "MyBackground"];
}
<! DOCTYPE html로>
<html>
를 <head>
<제목 페이지 제목 <이 / 타이틀>을
<link rel="stylesheet" type="text/css" href="/Styles/Site.css" />
</ 머리>
<body> 태그
<div의 id="header">
_PageStart.cshtml 파일을 사용하여
</ 사업부의>
<div의 id="main" style="background-color:@backgroundColor">
@ RenderBody ()
</ 사업부의>
<div의 id="footer">
© 2010 Contoso. 판권 소유
</ 사업부의>
</ 몸>
</ html로> 5.In InitPages 폴더, Content1.cshtml라는 파일을 생성하고 다음과 같은 기본 마크업을 교체 :
<p> 다음 이것은 콘텐츠 페이지 1 6.In는 InitPages 폴더 Content2.cshtml라는 이름의 다른 파일을 생성하고 다음과 같은 기본 마크업을 교체 </ 피>. :
<p> 다음 이것은 콘텐츠 페이지 2입니다. 브라우저에서 7.Run Content1.cshtml을 <이 / 피>.
Content1.cshtml 페이지가 실행되면, _PageStart.cshtml 파일과 레이아웃을 설정 또한 색상으로 PageData [ "MyBackground"]를 설정합니다. Content1.cshtml에서 레이아웃과 색상이 적용됩니다.
브라우저에서 8.Display Content2.cshtml.
두 페이지가 동일한 레이아웃 페이지로 _PageStart.cshtml에서 초기화된 색상을 사용하기 때문에 레이아웃은 동일합니다.
_PageStart.cshtml를 사용하여 오류를 처리하는
_PageStart.cshtml 파일에 대한 또다른 좋은 사용하는 폴더에서 모든. cshtml 페이지에서 발생할 수있는 프로그래밍 오류 (예외) 처리하는 방법을 만드는 것입니다. 이 예제는 당신에게 이렇게하는 한 가지 방법을 보여줍니다.
1.In 루트 폴더, InitCatch라는 폴더를 만듭니다.
귀하의 웹사이트 2.In InitCatch 폴더, _PageStart.cshtml라는 파일을 생성하고 다음과 같이 기존의 마크업과 코드를 교체 :
@ {
시도
{
RunPage ();
}
(예외 예) 잡기
{
Response.Redirect를 ( "~ / Error.cshtml? 소스 ="+
HttpUtility.UrlEncode (Request.AppRelativeCurrentExecutionFilePath));
}
}이 코드에서이 블록을 시도 내부 RunPage 메서드를 호출하여 명시적으로 요청한 페이지를 실행해보십시오. 모든 프로그래밍 오류가 요청한 페이지에서 발생하면, catch 블록 내부의 코드가 실행됩니다. 이 경우에는 코드가 페이지 (Error.cshtml)로 리디렉션 및 URL의 일부로 오류가 발생한 파일의 이름을 전달합니다. (당신도 바로 페이지를 만들어드립니다.)
귀하의 웹사이트 3.In InitCatch 폴더, Exception.cshtml라는 파일을 생성하고 다음과 같이 기존의 마크업과 코드를 교체 :
@ {
var에 dB = Database.Open ( "invalidDatabaseFile");
}이 예제의 목적에, 당신은 고의적으로 존재하지 않는 데이터베이스 파일을 열려고하여 오류를 생성이 페이지에서 뭘하는지.
4.In 루트 폴더, Error.cshtml라는 파일을 생성하고 다음과 같이 기존의 마크업과 코드를 교체 :
<! DOCTYPE html로>
<html>
를 <head>
<제목 오류 페이지 <이 / 타이틀>을
</ 머리>
<body> 태그
<h1> 오류 보고서 </ h1>
다음 파일을 실행하는 동안 오류가 발생했습니다 <p> : @ 요청 [ "소스"] <이 / 피의>를
</ 몸>
</ html로>이 페이지에서는 표현 @ [ "소스"]은 URL과 표시 그것의 가치를 나와서 요청합니다.
5.In 도구 모음이 저장을 누릅니다.
브라우저에서 6.Run Exception.cshtml.
오류가 Exception.cshtml에서 발생하기 때문에, _PageStart.cshtml 페이지는 메시지를 표시합니다 Error.cshtml 파일에 연결합니다.
면도기 구문을 사용하여 ASP.NET 웹 프로그래밍에 대하여 소개 - 예외에 대한 자세한 내용, 제 2 장 참조하십시오.
_PageStart.cshtml을 사용하여 폴더 액세스를 제한하는
당신은 또한 폴더의 모든 파일에 대한 액세스를 제한할 _PageStart.cshtml 파일을 사용할 수 있습니다.
본 사이트에서 템플릿 옵션을 사용하여 새 웹 사이트를 1.Create.
2.From 사용 가능한 초보 자용 사이트를 선택, 템플릿.
3.In 루트 폴더, AuthenticatedContent라는 폴더를 만듭니다.
4.In AuthenticatedContent 폴더 _PageStart.cshtml라는 파일을 생성하고 다음과 같이 기존의 마크업과 코드를 교체 :
@ {
Response.CacheControl = "아니오 - 캐시";
면 (! WebSecurity.IsAuthenticated) {
Response.Redirect를 ( "~ / 계정 / 로그인");
}
} 코드가 캐시되는 폴더에있는 모든 파일을 방지하여 시작합니다. (이것은 하나의 사용자의 캐시된 페이지는 다음 사용자가 사용할 수 있고 싶지 않아 공용 컴퓨터 같은 시나리오가 필요합니다.) 다음 코드는 그들이 볼 수 있으려면 사용자가 사이트에 로그인했는지 여부 결정의 폴더의 페이지. 사용자가 로그인하지 않은 경우, 코드가 로그인 페이지로 리디렉션됩니다.
Page.cshtml라는 AuthenticatedContent 폴더에 새 페이지를 5.Create.
6.Replace 다음과 같은 기본 마크업 :
@ {
레이아웃 = "~ / _SiteLayout.cshtml";
Page.Title = "인증된 콘텐츠";
}
<! DOCTYPE html로>
<html>
를 <head>
<meta charset="utf-8" />
</ 머리>
<body> 태그
인증 주셔서 감사합니다!
</ 몸>
브라우저에서 </ html로> 7.Run Page.cshtml. 이 코드는 로그인 페이지로 리디렉션됩니다. 당신이 페이지로 이동할 수 있으며 그 내용을보고, 당신은 등록한 후 로그인 인치 로그인하기 전에 등록해야합니다.
더 읽기 및 검색 URL을 생성하기
귀하의 사이트에있는 페이지에 대한 URL은 사이트가 얼마나 잘 작동에 영향을 미칠 수 있습니다. "친숙한"의 URL은 사람들이이 사이트를 사용하여 쉽게 만들 수 있습니다. 또한 사이트에 대한 검색 엔진 최적화 (SEO 업체)으로 도울 수 있습니다. ASP.NET 웹 사이트가 자동으로 친화적인 URL을 사용할 수있는 기능을 포함합니다.
라우팅에 대하여
ASP.NET은 그냥 서버에있는 파일을 가리키고 사용자의 작업을 대신 설명하는 의미있는 URL을 만들 수 있습니다. 가상의 블로그에 대한 URL 이러한 쌍 비교 :
http://www.contoso.com/Blog/blog.cshtml?categories=hardware
http://www.contoso.com//Blog/blog.cshtml?startdate=2009-11-01&enddate=2009-11-30
http://www.contoso.com/Blog/categories/hardware/
http://www.contoso.com/Blog/2009/November
첫 번째 쌍의, 사용자가 블로그를하고, blog.cshtml 페이지를 사용하여 표시되는 다음 오른쪽 카테고리 또는 기간을 유도할 수있는 쿼리 문자열을 구성해야 알 것입니다. 예제의 두 번째 세트는 많은 이해하고 작성 쉽습니다.
첫 번째 예제에 표시되는 URL 또한 특정 파일 (blog.cshtml)에 직접 가리 킵니다. 어떤 이유로 블로그를하거나, 서버에서 다른 폴더로 이동있다면 블로그는 다른 페이지를 사용하도록 재작 성이라면, 링크가 잘못된 것입니다. URL의 두 번째 세트는 특정 페이지를 가리키는하지 않으므로 심지어 블로그 이행 또는 위치 변경, URL이 여전히 유효합니다.
ASP.NET에서는 ASP.NET이 라우팅을 사용하기 때문에 우호적 URL은 위 예제에서 이들을 같이 만들 수 있습니다. 라우팅은 요청을 수행할 수있는 페이지 (또는 페이지)를 URL에서 논리적으로 매핑을 만듭니다. 매핑 (물리적, 특정 파일에하지 않음) 논리이기 때문에, 라우팅은 귀하의 사이트에 대한 URL을 정의하는 방법에 큰 유연성을 제공합니다.
어떻게 작품 라우팅
ASP.NET은 요청을 처리할 때, 그것은 얼마나 경로 그것을 결정하기 위해 URL을 읽습니다. ASP.NET은 왼쪽에서 오른쪽으로 가고, 디스크에있는 파일에 대한 URL의 개별 세그먼트와 일치하도록 시도합니다. 일치, URL에 남아있는 게있다면 경로 정보로 페이지에 전달됩니다. 예를 들어, 웹사이트에 다음과 같은 폴더 구조를 상상 :
그리고 그 누군가를 상상이 URL을 사용하여 요청을합니다 :
검색은 이렇게 가고 :
거기 1.Is 경로 및 /는 A / B / c.cshtml의 이름을 가진 파일? 그렇다면, 실행하고 어떠한 정보를 전달합니다. 그렇지 않으면 ...
거기 2.Is 경로와 / / b.cshtml의 이름을 가진 파일? 그렇다면, 그 사용 및 그것에 그것에게 정보를 전달합니다. 그렇지 않으면 ...
거기 3.Is 경로와 이름 / a.cshtml을 가진 파일? 페이지 및 그것에 / c를 정보 B를 통과할 수 있도록 실행하는 경우.
. 찾기가 더 정확한 일치를 찾을 수있다면 cshtml 파일을 자신의 지정된 폴더에 ASP.NET은 차례로이 파일을 찾고 계속 :
(아무 경로 정보) 1./a/b/c/default.cshtml.
(아무 경로 정보) 2./a/b/c/index.cshtml.
당신이 예상 했던데처럼 일을 명확하게하려면, 특정 페이지에 대한 요청 (즉, 요청합니다. cshtml을 파일 이름 확장자 포함) 참고. http://www.contoso.com/a/b.cshtml 같은 요청은 페이지 b.cshtml가 잘 실행됩니다.
한 페이지 안에, 당신은 사전입니다 페이지의 UrlData 속성 통해 경로 정보를 얻을 수 있습니다. 당신은 ViewCustomers.cshtml라는 파일을 가지고 귀하의 사이트가이 요청을 놓친 상상 :
http://mysite.com/myWebSite/ViewCustomers/1000
규칙은 상기에서 설명한 바와 같이, 요청이 귀하의 페이지로 이동합니다. 페이지 안에, 당신은 얻기 위해 다음과 같은 코드를 사용하여 경로 정보를 (이 경우, 값을 "1000") 디스플레이 :
<! DOCTYPE html로>
<html>
를 <head>
<제목 URLData <이 / 타이틀>을
</ 머리>
<body> 태그
고객 ID : @ UrlData [0]을 ToString ()를.
</ 몸>
당신이 (예를 들어, MyPage.cshtml 및 mypage.html을) 이름이 같은 그러나 다른 파일 이름 확장명을 가지고 페이지가있다면 전체 파일 이름은 포함되지 않습니다 라우팅 때문에 </ html로> 참고 모호있을 수 있습니다. 라우팅 문제를 피하기 위해, 그것은 최고의 당신이 이름을 그들의 확장에만 다른 사이트의 페이지가없는 것을 확인하고 있어요.
추가 리소스
듣기
|
첫댓글 레이저 자료가 별로 없어서 이렇게 예전 자료도 귀합니다.