DefaultHttpControllerSelector 웹 API의 클래스는 URI로 보내는 적절한 컨트롤러 작업 방법을 선택하는 역할을 합니다. 아래와 같이 쿼리 문자열에서 버전 관리를 구현해야 한다고 가정해 보겠습니다. v=1 StudentsV1Controller (Version 1) v=2 StudentsV2Controller (Version 2) https://localhost:58174/api/student?v=1과 같은 쿼리 문자열에 버전 정보를 전달하면 DefaultHttpControllerSelector에 있는 Sel
컨트롤러 메서드가 HttpResponseException 예외가 아닌 처리되지 않은 예외를 throw하면 예외 필터가 실행됩니다. HttpResponseException 유형은 HTTP 응답을 반환하도록 특별히 설계되었기 때문에 특수한 경우입니다. 예외 필터는 System.Web.Http.Filters.IExceptionFilter 인터페이스를 구현합니다. 예외 필터를 작성하는 가장 간단한 방법은 System.Web.Http.Filters.ExceptionFilterAttribute 클래스에서 파생되고 OnException 메서드
Accept 헤더는 브라우저가 데이터를 원하는 파일 형식을 서버에 알려줍니다. 이러한 파일 형식은 일반적으로 MIME 형식이라고 합니다. MIME은 다목적 인터넷 메일 확장 프로그램의 약자입니다. 버전 관리는 아래와 같이 헤더로 보낼 수 있습니다. Version=1 StudentsV1Controller Version=2 StudentsV2Controller 수락 헤더에서 버전을 처리하지 않았기 때문에 StudentV1 및 StudentV2 컨트롤러만 있으므로 404 not found 오류가 발생합니다. 자체 CustomCon
미디어 유형을 사용하면 API가 페이로드의 데이터를 해석하는 방법을 클라이언트에 알릴 수 있습니다. HTTP 프로토콜에서 미디어 유형은 가장 일반적인 웹 형식인 HTML, JSON 및 XML에 각각 해당하는 text/html, application/json 및 application/xml과 같은 식별자로 지정됩니다. application/vnd.api+json과 같은 다른 APIspecificMedia 유형도 있습니다. 다음은 미디어 유형으로 보내야 하는 버전입니다. application/vnd.demo.students.v1+js
작업 필터는 작업 메서드 실행 전후에 추가 논리를 추가하는 데 사용됩니다. OnActionExecuting 및 OnActionExecuted 메서드는 작업 메서드가 실행되기 전후에 논리를 추가하는 데 사용됩니다. 액션 메서드 실행 전후에 일부 정보를 기록하는 ActionFilterAttribute를 구현하는 LogAttribute를 생성해 보겠습니다. LogAttribute - 예 using System; using System.Diagnostics; using System.Web.Http.Controllers; using Sy
얕은 카피 - 개체의 얕은 복사본은 주 개체를 복사하지만 내부 개체는 복사하지 않습니다. 내부 개체는 원본 개체와 복사본 간에 공유됩니다. 얕은 복사의 문제는 두 개체가 독립적이지 않다는 것입니다. 한 개체를 수정하면 다른 개체에 변경 사항이 반영됩니다. 딥 카피 - 깊은 복사본은 개체의 완전히 독립적인 복사본입니다. 개체를 복사하면 전체 개체 구조가 복사됩니다. 한 개체를 수정하면 다른 개체에는 변경 사항이 반영되지 않습니다. 예시 class Program{ static void Main(stri
Take 연산자는 배열에서 주어진 수의 요소를 반환하는 데 사용되며 TheSkip 연산자는 배열에서 지정된 수의 요소를 건너뜁니다. 건너뛰기, 순서대로 첫 번째 요소부터 시작하여 지정된 위치까지 요소를 건너뜁니다. Take, 순서대로 첫 번째 요소에서 시작하여 지정된 위치까지 요소를 가져옵니다. 예시 1 class Program{ static void Main(string[] args){ List<int> numbers = new List<int>
Employee 클래스 e와 e1의 두 인스턴스를 만들고 있습니다. e는 toe1에 할당됩니다. 두 개체 모두 동일한 참조를 가리키고 있으므로 모든 Equals에 대해 예상대로 true 출력을 얻습니다. 두 번째 경우에는 속성 값이 동일하더라도 관찰할 수 있습니다.Equals는 false를 반환합니다. 기본적으로 인수가 다른 개체를 참조할 때.Equals는 값을 확인하지 않고 항상 false를 반환합니다. 예시 1 class Program{ static void Main(string[] args){ &nbs
Enumerable.Repeat()를 사용하여 기본값이 아닌 배열을 만들 수 있습니다. C#에서 반복되는 요소로 컬렉션을 반복했습니다. 먼저 반복할 요소와 횟수를 설정합니다. 예시 1 class Program{ static void Main(string[] args){ var values = Enumerable.Repeat(10, 5); foreach (var item in values){ &nbs
예, Collect() 메서드를 호출하여 C#에서 가비지 수집기를 강제 실행할 수 있습니다. 이는 성능 오버헤드를 생성할 수 있으므로 좋은 방법으로 간주되지 않습니다. Collect() 모든 세대의 즉각적인 가비지 수집을 강제 실행합니다. Collect(Int32) 0세대부터 지정된 세대까지 즉각적인 가비지 수집을 강제 실행합니다. 예시 using System; class MyGCCollectClass{ private const int maxGarbage = 1000; static
Unix 타임스탬프는 주로 Unix 운영 체제에서 사용됩니다. 그러나 모든 시간대의 시간을 나타내므로 모든 운영 체제에 유용합니다. Unix 타임스탬프는 시간을 초 단위로 나타냅니다. 유닉스 시대는 1970년 1월 1일에 시작되었습니다. 따라서 Unix Timestamp는 특정 날짜 사이의 초 수입니다. 예 DateTime.Now.Subtract().TotalSecondsMethod를 사용하여 Unix 타임스탬프를 얻으려면 class Program{ static void Main(string[] args
Visual Studio 디버그 모드와 릴리스 모드에서는 .Net 프로젝트를 빌드하기 위한 다른 구성입니다. .Net 프로젝트를 단계별로 디버깅하기 위해 디버그 모드를 선택하고 어셈블리 파일(.dll 또는 .exe)의 최종 빌드를 위해 릴리스 모드를 선택합니다. 빌드 구성을 변경하려면 - 빌드 메뉴에서 구성 관리자를 선택한 다음 디버그 또는 릴리스를 선택합니다. 또는 도구 모음의 솔루션 구성 목록에서 디버그 또는 릴리스를 선택합니다. #if 디버그 내부에 작성된 코드는 코드가 디버그 모드 내에서 실행되는 경우에만 실행됩니다.
내부 조인은 두 테이블에 모두 일치하거나 존재하는 레코드 또는 행만 반환합니다. 아래와 같이 조건에 따라 여러 테이블에 조인을 신청할 수도 있습니다. 여러 조건에 조인을 신청해야 하는 경우 익명 유형을 사용하십시오. 아래 예에서 우리는 LinqHere에서 부서와 직원이 조인되는 데 사용할 수 있는 2가지 방법을 작성했습니다. 예시 class Program{ static void Main(string[] args){ var result = &nbs
List 클래스의 Sort() 메서드 오버로드는 Comparison 대리자가 인수로 전달될 것으로 예상합니다. 공개 무효 정렬(비교 비교) CompareTo는 이 인스턴스의 값이 지정된 개체 또는 다른 Int16 인스턴스의 값보다 작은지, 같은지 또는 큰지를 나타내는 정수를 반환합니다. C#의 Int16.CompareTo() 메서드는 이 인스턴스를 지정된 개체 또는 다른 Int16 인스턴스와 비교하는 데 사용됩니다. 예시 class Program{ public static void Main(){ &nb
Monitor와 Lock 모두 objects.lock에 대한 액세스를 동기화하는 메커니즘을 제공합니다. 잠금은 바로가기이며 기본 사용을 위한 옵션입니다. TryEnter() Wait(), Pulse(), &PulseAll() 메서드를 사용하여 고급 멀티스레딩 솔루션을 구현하기 위해 더 많은 제어가 필요한 경우 Montior 클래스가 적합합니다. 잠금의 예 - 예 class Program{ static object _lock = new object(); static int Total; public static void Main()
재시도 논리는 실패한 작업이 있을 때마다 구현됩니다. 실패한 작업의 전체 컨텍스트에서만 재시도 논리를 구현합니다. 애플리케이션, 서비스 또는 리소스의 근본적인 문제를 식별할 수 있도록 재시도를 유발하는 모든 연결 실패를 기록하는 것이 중요합니다. 예시 class Program{ public static void Main(){ HttpClient client = new HttpClient(); dynamic res = null; &nb
아니요, 익명 형식은 인터페이스를 구현할 수 없습니다. 고유한 유형을 만들어야 합니다. 익명 형식은 먼저 형식을 명시적으로 정의하지 않고도 읽기 전용 속성 집합을 단일 개체로 캡슐화하는 편리한 방법을 제공합니다. 유형 이름은 컴파일러에 의해 생성되며 소스 코드 수준에서 사용할 수 없습니다. 각 속성의 유형은 컴파일러에 의해 유추됩니다. new 연산자를 objectinitializer와 함께 사용하여 익명 유형을 만듭니다. 예시 class Program{ public static void Main(){ &
Switch는 일치 표현식과의 패턴 일치를 기반으로 후보 목록에서 실행할 단일 스위치 섹션을 선택하는 선택 문입니다. switch 문은 단일 표현식이 세 개 이상의 조건에 대해 테스트되는 경우 if-else 구문의 대안으로 자주 사용됩니다. Switch 문이 더 빠릅니다. switch 문 평균 비교 횟수는 얼마나 많은 다른 사례가 있는지에 관계없이 1이므로 임의의 사례 조회는 O(1) 스위치 사용 - 예 class Program{ public enum Fruits { Red, Green, Blue } public static
out 값을 사용되는 메서드에 대한 인수로 인라인으로 선언할 수 있습니다. 이 버전에서는 기존 out 매개변수가 개선되었습니다. 이제 분리된 선언문을 작성하는 대신 메소드 호출의 인수 목록에서 변수를 선언할 수 있습니다. 장점 - 코드가 더 읽기 쉽습니다. 초기값을 할당할 필요가 없습니다. 기존 구문 - 예시 class Program{ public static void AddMultiplyValues(int a, int b, out int c, out int d){
C#을 사용하면 동일한 수의 out 매개변수 또는 동일한 수와 유형의 out 매개변수를 다른 순서로 사용하여 동일한 프로그램에서 여러 분해자 메서드를 사용할 수 있습니다. 이것은 새로운 튜플 구문의 일부입니다. 이것은 Tuple<> 클래스와 관련이 없지만 함수형 프로그래밍에서 가져옵니다. Deconstruct 키워드는 Deconstructors에 사용됩니다. 예시 public class Employee{ public Employee(string employeename, string firstName, st