편안한 라우팅 ASP.NET 이 패키지에는 디버깅 심볼이 들어 있습니다. 이것은 수학적으로 정확한 유형 계층구조인,강력한 타입을 정의합니다.

PM>설치 패키지 RestfulRouting

영 편안한 라우팅 ASP.NET MVC! 라우팅은 틀림없이 모든 것의 핵심입니다 ASP.Net 응용 프로그램. 경로를 직접 관리하는 것은 번거롭고 좌절하며 비생산적 일 수 있습니다. 일부 개발자는 포괄 경로를 사용하므로 응용 프로그램이 커짐에 따라 예기치 않은 문제가 발생할 수 있습니다. 편안한 라우팅은 경로를 등록하는 독단적 인 인터페이스를 제공하여 라우팅 관리 문제를 해결합니다.

이 라이브러리는 당신이 이제까지 개발 방법을 궁금해 할 정도로 사용하기 쉬운 것을 발견 바랍니다 ASP.Net 그것없이 응용 프로그램.

골든 세븐

편안한 라우팅은Resources와 골든 세븐 액션의 아이디어를 기반으로합니다:

작업
인덱스 가져오기
얻을
게시물 만들기
새로운 얻을
편집 가져오기
업데이트
파기 삭제

편안한 라우팅의 목적은 당신이 당신의 컨트롤러의 양심 수 있도록하는 것입니다. 적절한 경우 규칙을 구부릴 수 있지만,당신은 정말이 일곱 행동에 제한 모든 컨트롤러를 유지에 초점을 맞추어야한다. 당신이 편안한 라우팅의 규칙을 싸우는 경우에,당신은 우리의 의견을 고집 프레임 워크의 힘을 활용하고 그렇게 비참 할 수 없습니다.

기본 경로

편안한 라우팅에 들어가기 전에 다음에 의해 제공되는 기본 경로에 대해 논의하고 싶습니다.ASP.NET 엠비씨 많은 시작 템플릿에서 발견,그것은 시작할 때 유용한 도구입니다,하지만 난 당신이 어떤 프로덕션 환경에 사용하지 않는 것이 좋습니다. 나는 아래의 이유를 나열 할 것이다:

  • 프로젝트의 모든 컨트롤러는 편안한 라우팅과 같은 라우팅 프레임 워크에 등록되지 않은 경우에도 액세스 할 수 있습니다.
  • 예기치 않은 외부 경로 확인 및 디버깅 시간이 발생할 수 있습니다.

단계 1. 편안한 라우팅 설치

시작하려면 기존 라우팅으로 시작하는 것으로 가정합니다.ASP.Net 프로젝트 및 그 지점에 도착하는 방법을 이해합니다.

패키지 관리자 콘솔을 열고 다음을 입력합니다.

패키지 관리자 콘솔을 사용하지 않으려면 웹 프로젝트를 마우스 오른쪽 단추로 클릭하고”너겟 패키지 관리”컨텍스트 메뉴 항목을 선택할 수 있습니다. RestfulRouting패키지 설치를 검색합니다.

단계 2. 편안한 라우팅 구성

프로젝트에 몇 가지 변경 사항이 발생 했어야하는데,즉Routes.csApplicationController의 두 파일이 추가되었습니다.

Routes.cs은 오른쪽 섹션과 같아야 합니다. 우리는 약간의 도움이 이미이 파일에 당신을 위해 포함되어 있습니다. 모두가 블로그 응용 프로그램을 작성,그래서 당신이 그것을 통해 보았다 후 주석 코드를 삭제 주시기 바랍니다.

웹활성화기에 대한 종속성을 참고하면 응용 프로그램이 시작될 때 경로가 등록됩니다. Start메서드를 직접 호출하려는 경우 이 종속성을 제거하도록 선택할 수 있습니다.

// setting the root routemap.Root<HomeController>(x => x.Index());

구성에 대해Root;

Routes.cs외에도ApplicationController을 얻을 수 있습니다. 이 기본 컨트롤러를 사용하는 것은 선택 사항이지만 형식 결과

3 단계를 활용하는 데 필요한 코드가 있습니다. 엔진 구성 보기(옵션)

ASP.Net 뷰 엔진에 따라 뷰를 찾습니다. 기본 보기 엔진은 괜찮습니다,우리는 폴더 구조가 조금 자세한 것으로 나타났습니다. 당신은 우리의 뷰 엔진을 활용하려는 경우,다음 글로벌 변경.다음과 같이 아삭 파일.

여기 있습니다. 코드! 코드! 코드!

당신은 어떻게 당신의 경로의 등록에 무슨 일이 일어나고 있는지에 대한 자세한 내용을 보려면 계속 읽기.

루트 세트

이 섹션에서는RouteSet에 대해 배웁니다. 이 클래스는 편안한 라우팅 작업을 수행하는 데 중요합니다.

기본 사항

경로 집합은 경로 매핑의 모음입니다. 응용 프로그램에서 경로를 정의할 뿐만 아니라 다른 경로 집합에 연결하여 최소한의 노력으로 다양한 경로 집합을 만들 수 있습니다.

모든 경로는 경로 집합의Map방법 안에 정의됩니다.

맵으로 전달된 아이매퍼 인스턴스는 모든 맵의 중심에 있는RouteTable사전에 경로를 매핑하는 방법을 제공합니다.ASP.Net 응용 프로그램. 당신이 너겟을 통해 편안한 라우팅을 설치 한 경우,당신은 이미 당신을 위해 만든 루트 세트를 발견했을 것이다.

연결 때때로 경로 세트를 논리적으로 분리하려고합니다. 모든 경로를 단일 경로 집합으로 그룹화하는 대신 경로 집합을 연결할 수 있는 기능을 제공합니다. 루트 집합의 루트가 되려면 하나의 루트 집합을 선택해야 하며,그 후에는 원하는 방식으로 다른 루트 집합을 연결할 수 있습니다. 경로 집합은 영역과 유사한 네임스페이스도 지원합니다.

구성(선택 사항)

경로 집합은 경로 등록 동작을 수정할 수 있는 설정을 제공합니다. 이러한 속성은 경로 집합의 컨텍스트 내에서 찾을 수 있습니다. 대부분의 개발자는 이러한 기능을 터치하고 싶지 않을 것입니다.

설정 기본값 결과
로어캐슬 true 소문자 불변 문화권 등록
로어캐스드폴트들 true 소문자 불변 문화에 정상적으로 등록 할 때 작업을 등록
로어캐세이션 true 소문자 불변 문화권에 경로에 등록 할 때 당신의 행동을 등록
지도삭제 false 등록 삭제의 추가 작업. 리소스를 제거하기 전에 삭제 확인 페이지를 표시하는 데 사용됩니다.

매핑

편안한 라우팅은 매핑 프레임 워크이며 매핑을 수행하기 위해 일련의 개념과 인터페이스를 제공합니다. 아래의 각 인터페이스와 각 기능이 제공하는 기능에 대해 자세히 읽어보십시오.

루트

map.Root<HomeController>(x => x.Index());

모든 응용 프로그램에는 기본 페이지가 필요하며 루트 경로를 등록하는 것이 그 어느 때보 다 쉬워졌습니다. 응용 프로그램이에서 호스팅된 경우 루트로 간주됩니다.

응용 프로그램에 루트가 하나만 있을 수 있습니다.

리소스

map.Resource<ProfileController>();

리소스는 응용 프로그램 사용자의 관점에서 유일하게 생각할 수 있는”사물”입니다. 인증된 사용자에 대한 프로필은 리소스의 좋은 예입니다. 다음 웹 사이트를 살펴보십시오. 이 프로필에 올 때,당신은 쿠키(또는 다른 암시 적 수단)를 통해 식별자를 유도하고,경로의 경로에 식별자가 필요하지 않습니다.

응용 프로그램이 프로필이 무엇인지,그리고 프로필을 제시하는 방법을 알고 있다고 가정합니다. 이제 루트 세트에서 등록이 어떻게 보입니까?리소스를 등록할 때 일련의 작업 및 메서드가 자동으로 등록됩니다. 컨트롤러를 등록하고 작업을 구현합니다.

작업
얻을
게시물 만들기
새로운 얻을
편집 가져오기
업데이트
파기 삭제

ProfileController을 사용한 예제의 경우 다음 출력을 얻을 수 있습니다:

이 경우 컨트롤러는 컨트롤러에서 작동하지만 컨트롤러는 컨트롤러에서 작동하지만 컨트롤러는 컨트롤러에서 동작하지 않습니다.
2018 년 12 월 1 일,2018 년 12 월 1 일,2018 년 12 월 1 일,2018 년 12 월 1 일,2018 년 12 월 1 일,2018 년 12 월 1 일,2018 년 12 월 1 일,2018 년 12 월 1 일
새로운 얻을 프로필#새로운 /프로필/새로운
생성 포스트 프로필#생성 /프로필
편집 프로필#편집 /프로필/편집
업데이트 넣어 프로필#업데이트 /프로필
삭제 삭제 프로필#파괴 /프로필

이름 지정

때로는 컨트롤러의 이름을 한 가지로 지정할 수도 있습니다. 이 할 간단합니다.

profile#show에 대한 새 주소가

Additionally, you can change the default action names of a resource by using the PathNames메서드로 변경됩니다. 이것은 권장되지 않습니다,하지만 우리는 당신에게 옵션을 제공 할 것을 좋아합니다.

작업 선택

때로는 리소스에 대해 제공하는 모든 방법이 필요하지 않을 수도 있습니다. 다음 예를 상상해보십시오:

  • 사용자로서,우리가 등록 할 때 암시 적으로 만들어지기 때문에 프로필을 만들 수 없습니다.
  • 사용자로서 현재 프로필을 편집 할 수 있어야합니다.
  • 사용자로서 내 프로필을 삭제할 수 없습니다.
  • 사용자로,내 프로필을 볼 수 있어야한다

검토 후,우리는 다음과 같은 작업을 등록해야합니다: Show, Edit, Update. 리소스를 이러한 작업으로 제한하려면 루트 집합에서 다음 코드를 사용합니다.

리소스 중첩

// NESTING A RESOURCEmap.Resource<ProfileController>(profile => { profile.Resource<CreditCardController>()});

리소스가 다른 리소스에 종속되는 경우가 있습니다. 리소스를 중첩할 때 부모 리소스와 종속 리소스 간에 일대일 관계가 있습니다.

creditcard리소스를 만들고profile리소스(오른쪽에 표시된 대로)내에 중첩하면 프로필 경로를 제외한 결과 경로가 표시됩니다:

신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드나 신용카드
Action HTTP Method Result (controller#action) Url Template
SHOW GET creditcard#show /profile/creditcard
NEW GET creditcard#new /profile/creditcard/new
CREATE POST creditcard#create /profile/creditcard
EDIT GET creditcard#edit /profile/creditcard/edit
신용카드를 삭제하면 신용카드가 삭제되고 신용카드가 삭제되면 신용카드가 삭제되고 신용카드가 삭제되고 신용카드가 삭제되고 신용카드가 삭제되고 신용카드가 삭제되고 신용카드가 삭제되고 신용카드가 삭제되고 신용카드가 삭제되고 신용카드가 삭제되고 신용카드가 삭제되고 신용카드가 삭제되고 신용카드가 삭제되고 신용카드가 삭제되고 신용카드가 삭제되고 신용카드가 삭제되고 신용카드가 삭제되고 신용카드가 삭제됩니다.

리소스

map.Resources<ProductsController>();

리소스는 도메인 내의 컬렉션을 나타냅니다. 상점 응용 프로그램을 구축 상상해,당신은 고객이 검색 및 제품을 구입할 수 있도록 카탈로그를 노출 할 수 있습니다. 제품은 자원으로 간주됩니다. 생성 된 웹 사이트는 또한 제공 할 수있는 많은 제품이 있음을 반영합니다.

제품의 복수화를 주목하십시오. 너가 전자 상거래 위치를 시작하면,너는 아마 1 개 이상 제품을 이번에 매출할텐데.

작업

리소스를 등록할 때 일련의 작업 및 방법이 자동으로 등록됩니다. 컨트롤러를 등록하고 작업을 구현합니다.

작업
인덱스 가져오기
얻을
게시물 만들기
새로운 얻을
편집 가져오기
업데이트
파기 삭제

ProductsController의 예제에서는 다음과 같은 출력을 얻을 수 있습니다:

이름 지정

때로는 컨트롤러의 이름을 한 가지로 지정할 수도 있습니다. 이 할 간단합니다.

제품#색인에 대한 새 주소가 변경됩니다.

또한PathNames방법을 사용하여 리소스의 기본 작업 이름을 변경할 수 있습니다. 이것은 권장되지 않습니다,하지만 우리는 당신에게 옵션을 제공 할 것을 좋아합니다.이 매개 변수에는 다음과 같은 매개 변수가 포함되어 있습니다. 예를 들어,제품#위의 작업 및 메서드에서 작업 표시에 대 한 주소 패턴은/products/{id}입니다.

일부 시나리오에서는 매개 변수에 대해 다른 이름을 사용할 수 있습니다. 매개 변수 이름이 리소스를 식별하는 데 사용되는 속성의 이름과 일치하도록 할 수 있습니다.

작업 선택

때때로 우리가 제공하는 모든 방법이 필요하지 않을 수도 있습니다. 오른쪽의 다음 방법을 사용하여 작업을 제거 할 수 있습니다.

중첩 리소스

map.Resources<ProductsController>(products => { products.Resources<ReviewsController>()});

리소스는 때때로 다른 리소스에 종속됩니다. 리소스를 중첩할 때 부모 리소스와 종속 리소스 간에 일대다 관계가 있습니다. 가지고 있는 제품에 대하여 생각하십시오 reviews.To 이렇게 하면 두 개의 리소스를 등록할 수 있습니다.멤버 및 컬렉션 경로

리소스 내부의MemberCollection메서드를 사용하여 컬렉션에 경로를 추가합니다. 지도에 사용할 수있는 방법은 가져 오기,게시,넣기,삭제 및 머리입니다. 리소스 컨텍스트(단수)내에서는Member메서드에만 액세스할 수 있습니다.

표준 매핑

<!-- IN RAZOR VIEW --><a class="btn" href="@Url.Action("usingpath", "extras")">Path</a><a class="btn" href="@Url.Action("usingroute", "extras")">Route</a>

때때로 우리의 규칙은 당신을 위해 작동하지 않습니다. 우리는 의견을 고집 할 수있다,그러나 우리는 철권으로 지배하지 않습니다.

사용자 지정 경로를 추가할 수 있도록 두 가지 추가 방법이 제공됩니다.ASP.Net 인터페이스 래퍼로 라우팅 구문. 경로는 사용자 지정 경로를 추가하는 매우 전통적인 방법입니다.

영역

영역은 편안한 라우팅에서 네임스페이스로 처리됩니다. 일반적으로 폴더와 네임스페이스 사이에는 상관관계가 있으므로 대부분의 개발자에게는 이미 하는 것과 큰 차이가 없습니다.

영역 메서드에 제공된 컨트롤러는 그룹화된 컨트롤러의 네임스페이스를 결정하는 데 사용됩니다. “매핑”문자열은 영역 이름을 결정하는 데 사용됩니다.

영역 밖으로 나가려면 영역을 빈 문자열로 설정할 수 있습니다. 자원 및 자원을 가진 모든 규칙은 영역을 다룰 때 여전히 적용됩니다.

뷰 엔진

편안한 라우팅에는RestfulRoutingRazorViewEngineRestfulRoutingWebFormViewEngine의 두 가지 뷰 엔진이 함께 제공됩니다. 이 뷰 엔진 중 하나를 살펴 보겠습니다.

이러한 뷰 엔진은 다음과 같은 방식을 변경합니다 ASP.Net 보기가 표시됩니다.

형식 결과

리소스 및 리소스에 암시적 형식 확장을 사용할 수 있는 기능입니다. 이 기능에는 두 가지 핵심 방법이 있습니다.

<system.webServer> <modules runAllManagedModulesForAllRequests="true" /></system.webServer>
namespace RestfulRouting.Documentation.Controllers{ public abstract class ApplicationController : Controller { protected ActionResult RespondTo(Action<FormatCollection> format) { return new FormatResult(format); } }}
// IN ROUTESET// enable format routesextras.WithFormatRoutes();

우리는 조금 더 좋은 우리의 유창한 인터페이스를 사용하여 만들기 위해 상자 밖으로 알려진 유형의 집합을 제공하지만,우리는 당신이 생각할 수있는 파일 확장자를 지원합니다. 이러한 형식 경로를 생성하려면 다음과 같이 형식을 지정하십시오.

멋진 권리?! 우리는 당신이 형식 경로를 사용하려는 경우 쿼크/잡았다의 다음 섹션을 읽어 보시기 바랍니다.당신이 아껴서 사용하는 단일 페이지 응용 프로그램을 구축하고 당신의 행동에 기능을 구분하는 것이 적절한시기를 이해하는 경우 그의 도움이됩니다.

데드 링크 리디렉션

다른 사람보다 더 나은 웹 사이트 결정을 내릴 때가 있습니다. 우리는 기존의 링크를 파괴하지 않고,링크를 변경할 수있는 기능을 할 수 있습니다. 응용 프로그램이 살아 간다 한 번이 필요합니다. 이는 주로 공개 사이트에 적용되지만 인트라넷 사이트에서 유용 할 수 있습니다.

가장 먼저 주목해야 할 것은 모든 리디렉션 경로를 목록의 마지막 경로로 등록해야한다는 것입니다. 그 이유는 그들이 가장 덜 중요하기 때문입니다. 이전 링크에 액세스 할 때 만 적중 할 것이다. 이 경우 문제가 발생합니다.

둘째,등록은 편안한 구문의 오래된 구문처럼 보이지만 정의 내에 중첩 할 필요는 없습니다. 데드 링크 또는 리디렉션이라는 루트 세트를 만들고 마스터 루트 세트의 끝에 연결하는 것이 좋습니다.

마지막으로 중요한 것은 리디렉션 필터 속성을 전역 필터로 등록하는 것입니다.

오른쪽에서 볼 수 있듯이 이전 주소를 설정하고 새 주소를 확인할 값을 제공합니다. 우리는 가장 일치하는 경로를 찾기 위해 커버 아래 엘리 헬퍼를 사용합니다.

경로 디버거

// IN ROUTESETmap.DebugRoute("routedebug");

편안한 라우팅은 경로 매핑을 이해하는 데 도움이되는 강력한 경로 디버거와 함께 제공됩니다. 경로 집합에 다음 줄을 추가하여 경로 디버거를 활성화 및 비활성화할 수 있습니다.

쿼크/고차

이 섹션에서는 다음과 같은 몇 가지 단점을 자세히 설명합니다 ASP.NET 그리고 그 이유는 무엇입니까? 이러한 문제가 때때로 발생할 수 있으며 응용 프로그램에 영향을 줄 수 있는 이유와 시기를 이해하는 것이 좋습니다.

지속 경로 값

ASP.Net 엠베세더블은 항상 도움이 되려고 노력합니다. 도움이,좋은 의도 있지만,때로는 이상한 행동으로 이어질 수 있습니다. 가장 큰 문제는 기존 요청에서 경로 값을 저장할 수 있습니다.

이 특질을 이해하면 편안한 라우팅뿐만 아니라 많은 문제를 디버깅하는 데 도움이 될 수 있습니다.ASP.NET 일반적으로. 당신은 오른쪽에 예를 볼 수 있습니다.

믹싱 매핑 레벨

map.Resource<ProfileController>(profile => { // DOH! should be profile // not map! // EXCEPTION!!!! map.Resource<CreditCardController>()});

편안한 라우팅은 유창하고 중첩되도록 설계되었습니다. RouteSet를 만드는 동안 실수로 잘못된 매개 변수를 호출하여 진단하기 어려운 오류가 발생할 수 있습니다. 우리의 예외는 도움이되지만,이것은 우리가 그것을 문서화하기로 결정 충분히 일반적인 실수입니다.

네임스페이스 및 이름 충돌

때때로 컨트롤러의 이름을 동일하지만 다른 네임스페이스에 지정하려고 합니다. 이는 사이트의 관리 및 전면 섹션을 구축 할 때 적합합니다. 라우팅이 올바른 컨트롤러를 인스턴스화할 수 있도록 네임스페이스를 적절하게 설정해야 합니다.