ASP. NET 5 시리즈 튜 토리 얼 (7) 완결 편 - 판독 코드
[Route] 속성 은 Controller 의 URL 템 플 릿 을 정의 합 니 다.
[Route("")] 이 템 플 릿 형식 에 맞 는 모든 HTTP 요청 은 이 controller 로 연 결 됩 니 다.이 예 에서 경로 의 이름 은 Controller 에 대응 하 는 접두사 이 고 TodoController 류 에 대해 서 는 템 플 릿 이 'api / todo' 입 니 다.
HTTP 방법
[HttpGet], [HttpPost] 와 [HttpDelete] 속성 을 controller 동작 에 대응 하 는 HTTP 방법 으로 정의 합 니 다 (또한 [HttpPut] 와 [HttpPatch] 속성 도 있 으 며, 이 예제 에 서 는 사용 되 지 않 았 습 니 다.)
[HttpGet] IEnumerable<TodoItem> GetAll() {} [HttpGet("", Name = "")]IActionResult GetById (int id) {}[HttpPost]void CreateTodoItem([FromBody] TodoItem item) {}[HttpDelete("")]IActionResult DeleteItem(int id) {}
GetById 와 DeleteItem 방법의 매개 변 수 는 루트 의 전달 정 보 를 증가 시 킬 수 있다.따라서 루트 템 플 릿 의 보다 완벽 한 문법 은 'api / [controller] / {id: int}' 입 니 다.
"{id: int}" 에서 id 는 변수 이 고 "int" 는 매개 변 수 를 정형 으로 합 니 다.다음은 URL 인 스 턴 스 입 니 다.http://localhost/api/todo/1http://localhost/api/todo/42
다음 으로 쓸 수 없습니다:http://localhost/api/todo/abc
GetById 와 DeleteItem 방법 역시 id 라 는 인 자 를 가지 고 있 습 니 다.프레임 워 크 는 컨트롤 러 에 실제 값 을 자동 으로 전달 합 니 다.하면, 만약, 만약...http://localhost/api/todo/42, id 의 값 은 42 이 고 이 과정 은 매개 변수 로 연 결 됩 니 다.
Create Todo Item 방법 은 다른 매개 변수 바 인 딩 을 대표 합 니 다:[HttpPost]void CreateTodoItem([FromBody] TodoItem item) {}
[FromBody] 속성 지정 framework 는 Request 에서 TodoItem 인 자 를 역 직렬 화 합 니 다.
다음은 request 와 contrller 동작 에 대응 하 는 목록 입 니 다.
Request
Controller Action
GET /api/todo
GetAll
POST /api/todo
CreateTodoItem
GET /api/todo/1
GetById
DELETE /api/todo/1
DeleteItem
GET /api/todo/abc
none – returns 404
PUT /api/todo
none – returns 404
마지막 두 가지 예 는 다른 용도 로 404 오 류 를 되 돌려 줍 니 다.예 를 들 어 'GET / api / todo / abc', 'abc' 실 참 은 GetById 방법 에서 요구 하 는 정형 데이터 형식 이다.
액 션 반환 값
TodoController 류 는 다양한 contrller action 의 반환 값 방법 을 보 여 줍 니 다.
GetAll 방법 은 CLR 대상 을 되 돌려 줍 니 다.[HttpGet]IEnumerable<TodoItem> GetAll(){_items;}
반환 대상 의 직렬 화 정 보 는 Response 메시지 에 저 장 됩 니 다.기본 형식 은 JSON 이 고 클 라 이언 트 역시 XML 데이터 형식 을 받 을 수 있 습 니 다.http://localhost:5000/api/todo HTTP/1.1User-Agent: FiddlerHost: localhost:5000Accept: application/xml
Response:HTTP/1.1 200 OKContent-Type: application/xml;charset=utf-8Server: Microsoft-HTTPAPI/2.0: Thu, 30 Oct 2014 22:40:10 GMTContent-Length: 228<ArrayOfTodoItem xmlns:i="" xmlns=""><TodoItem><Id>1</Id><IsDone></IsDone><Title>First Item</Title></TodoItem></ArrayOfTodoItem>
GetById 방법 은 IAction Result 인 터 페 이 스 를 되 돌려 줍 니 다:[HttpGet("", Name = "")]IActionResult GetById (int id){var item = _items.FirstOrDefault(x => x.Id == id);(item == null){HttpNotFound();}ObjectResult(item);}
URL 에 대응 하 는 id 가 있 으 면 이 방법 은 Object Result 로 돌아 갑 니 다.Object Result 를 되 돌려 주 는 것 은 CLR 모델 을 되 돌려 주 는 것 과 같 습 니 다.방법 에 서 는 반환 유형 을 IAction Result 로 규정 하고 있다.따라서 이 방법 은 다른 유형 으로 돌아 갈 수 있다.
대응 하 는 ID 가 없 으 면 HttpNotFound 로 돌아 가면 페이지 에 404 오류 가 발생 합 니 다.
마지막 으로 Create Todo Item 방법 은 방법 에 반환 값 을 직접 설정 하 는 방법 을 보 여 줍 니 다.[HttpPost]void CreateTodoItem([FromBody] TodoItem item){// (some code shown here)Context.Response.StatusCode = 201;Context.Response.Headers[""] = url;}
이런 방법의 결함 은 단원 테스트 를 진행 하기 매우 어렵다.(테스트 관련 토론 은 Unit Testing Controllers in ASP. NET Web API 참조).
의존 주입
MVC 6 에는 의존 주입 기능 이 내장 되 어 있다.ToDo 목록 을 포함 하 는 reposcory 클래스 를 만 듭 니 다.
우선, reposcory 에 인 터 페 이 스 를 정의 합 니 다.System.Collections.Generic;TodoApi.Models{ITodoRepository{IEnumerable<TodoItem> AllItems { ; }void Add(TodoItem item);TodoItem GetById(int id);bool TryDelete(int id);}}
이후 구체 적 인 실현 방법 을 정의 한다.System;System.Collections.Generic;System.Linq;TodoApi.Models{TodoRepository : ITodoRepository{List<TodoItem> _items = List<TodoItem>();IEnumerable<TodoItem> AllItems{get{_items;}}TodoItem GetById(int id){_items.FirstOrDefault(x => x.Id == id);}void Add(TodoItem item){item.Id = 1 + _items.Max(x => (int?)x.Id) ?? 0;_items.Add(item);}bool TryDelete(int id){var item = GetById(id);(item == null){;}_items.Remove(item);;}}}
구조 함 수 를 사용 하여 reposcory 를 contrller 에 주입 합 니 다:[Route("")]TodoController : Controller{// Remove this code:// List<TodoItem> _items = List<TodoItem>()//{// TodoItem { Id = 1, Title = "" }//};// Add this code:ITodoRepository _repository;TodoController(ITodoRepository repository){_repository = repository;}
그리고 controller 방법 을 reposcory 로 업데이트 합 니 다.[HttpGet]IEnumerable<TodoItem> GetAll(){_repository.AllItems;}[HttpGet("", Name = "")]IActionResult GetById(int id){var item = _repository.GetById(id);(item == null){HttpNotFound();}ObjectResult(item);}[HttpPost]void CreateTodoItem([FromBody] TodoItem item){(!ModelState.IsValid){Context.Response.StatusCode = 400;}else{_repository.Add(item);url = Url.RouteUrl("", { id = item.Id }, Request.Scheme, Request.Host.ToUriComponent());Context.Response.StatusCode = 201;Context.Response.Headers[""] = url;}}[HttpDelete("")]IActionResult DeleteItem(int id){(_repository.TryDelete(id)){HttpStatusCodeResult(204); // 201 No Content}else{HttpNotFound();}}
우 리 는 주입 시스템 에 의존 할 때 까지 reposcory 를 등록 해 야 작 동 할 수 있 습 니 다.Startup 클래스 에 다음 코드 를 추가 합 니 다.void ConfigureServices(IServiceCollection services){services.AddMvc();// codeservices.AddSingleton<ITodoRepository, TodoRepository>();}
응용 프로그램 이 실 행 될 때 contrller 가 생 성 되면 framework 는 TodoRepository 를 contrller 에 자동 으로 주입 하여 전체 응용 수명 주기 에 작용 합 니 다.
IIS 외 독립 배치 응용
기본적으로 F5 를 누 르 면 IIS Express 에서 실 행 됩 니 다.도구 모음 에서 IIS Express 아이콘 을 볼 수 있 습 니 다.![]()
ASP. NET 5.0 은 다른 서버 에 배치 할 수 있 습 니 다. 이 섹 션 에 서 는 IIS 밖에서 실행 할 수 있 는 WebListener 를 사용 합 니 다.
주의: 응용 을 IIS 에 배치 하 는 데 아직도 많은 장점 이 있 습 니 다. 예 를 들 어 안전성, 진도 관리 등 입 니 다.
procject. json 파일 에 Microsoft. AspNet. server. WebListener 패키지 추가:"": {"": "","": "","": "",// New:"": ""},
다음은 procject. json 에 다음 옵션 을 추가 합 니 다.{// Other sections not shown"": {"": ""}}
'commands' 에는 K 가 실 행 될 때 전달 할 미리 정 의 된 명령 목록 이 포함 되 어 있 습 니 다.이 예 에서 "웹" 은 명령 이름 으로 임의의 실제 명령 이름 값 일 수 있 습 니 다.
Microsoft. AspNet. Hosting 프로그램 집합 은 ASP. NET 5.0 응용 프로그램 을 배치 하 는 데 사 용 됩 니 다.
· -- server 표 시 는 서버 를 설명 하 는 데 사 용 됩 니 다. 이 예 에서 WebListener 입 니 다.
· -- server. urls 표 시 는 감청 할 URL 을 제공 합 니 다.
procject. json 파일 저장.Solution Explorer 에서 프로젝트 를 오른쪽 클릭 하여 Properties 를 선택 하 십시오.Properties 란 에서 Debug 를 클릭 합 니 다.Debug target 에서 'IIS Express' 를' 웹 '으로 변경 합 니 다.![]()
F5 를 누 르 면 앱 을 실행 합 니 다.Visual Studio 는 이 때 WebListener 를 시작 하 는 콘 솔 프로그램 을 실행 합 니 다.![]()
브 라 우 저 열기, 입력http://localhost:5000。환영 창 을 볼 수 있 습 니 다.
IIS 를 사용 할 필요 가 있다 면 이전 단계 에서 Debug Target 을 'IIS Express' 로 변경 하면 된다.
이 글 은 이 시리즈 의 마지막 편 으로 여러분 의 관심 에 감 사 드 립 니 다.
원본 링크:http://www.asp.net/vnext/overview/aspnet-vnext/create-a-web-api-with-mvc-6
디 렉 터 리:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
작업 중 문제 해결 - (win 2003 asp. net) Session 과 페이지 전송 방법 으로 해결 방안 을 정상적으로 사용 할 수 없습니다.또한 F 는 처음에 우리 의 BP & IT 프로젝트 팀 이 Forms 폼 검증 을 사용 했다 고 판단 할 수 있 습 니 다. 페이지 를 뛰 어 넘 는 것 은http://hr.bingjun.cc/MyTask/MyTas...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.

![clip_image001[5] clip_image001[5]](https://s1.md5.ltd/image/0cbf6ed12e9499aa32a91aa68ecadde6.jpg)
![clip_image001[7] clip_image001[7]](https://s1.md5.ltd/image/c573687be4aa7ce5b24a5e222a5e8404.jpg)