ASP.NET 5 MVC 6에서 Microsoft는 일반 MVC 컨트롤러 클래스 (
Controller
)를 병합했습니다.
Web Api 컨트롤러 클래스 (
ApiController
)
). 지금은 단지
Controller
입니다
상속 할 클래스. 여기에는 WebApi의 기능도 포함됩니다.
이제 MVC와 WebApi 컨트롤러를 구별하는 것은 간단하지 않습니다. 둘 다
Controller
에서 상속
수업. 내가 알 수있는 유일한 차이점은 WebApi의 라우팅 정보가 여전히 속성
HttpGet
에 의해 제공된다는 것입니다
HttpPost
HttpPut
그리고
HttpDelete
. 그러나 이제는 다른 속성으로 속성 라우팅을 사용하여 MVC 컨트롤러에서 동일한 작업을 수행 할 수 있습니다.
기능도 병합 된 것 같습니다. MVC 컨트롤러는 이제 콘텐츠 협상도 지원합니다.
구체적인 질문은 다음과 같습니다 :
여전히 차이가 있습니까? 아니면 경로가 지정된 방식입니까? 웹 앱을 만드는 데 어떤 방법이 선호됩니까?
(거의) 빈 MVC 컨트롤러 :
public class HomeController : Controller
{
public List<Person> Index()
{
return new List<Person>()
{
new Person() {Firstname = "test1", Lastname = "test2"},
new Person() {Firstname = "test3", Lastname = "test4"}
};
}
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
return View();
}
public IActionResult Contact()
{
ViewData["Message"] = "Your contact page.";
return View();
}
public IActionResult Error()
{
return View("~/Views/Shared/Error.cshtml");
}
}
(거의) 빈 WebApi 컨트롤러 :
[Route("api/[controller]")]
public class ValuesController : Controller
{
// GET: api/values
[HttpGet]
public IEnumerable<Person> Get()
{
return new List<Person>()
{
new Person() {Firstname = "test1", Lastname = "test2"},
new Person() {Firstname = "test3", Lastname = "test4"}
};
}
// GET api/values/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
// POST api/values
[HttpPost]
public void Post([FromBody]string value)
{
}
// PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/values/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
수정 :
콘텐츠 협상이 효과가 있는지 확인하려면 기본적으로 반환 유형이 JSON 전용이므로이 코드를 Startup.ConfigureServices 메서드에 포함시켜야합니다.
services.Configure<MvcOptions>(options =>
{
options.AddXmlDataContractSerializerFormatter();
});
- 답변 # 1
- 답변 # 2
메이슨이 질문에 완벽하게 대답하는 동안, 질문에 대한 향후 방문자에게 도움이 될 차이점과 리소스에 대한 추가 정보를 제공하고자합니다.
Microsoft는
ApiController
를 합병 그리고Controller
하나의 클래스로,Controller
. 그렇게하기 위해, 그들은ApiController
의 일부 기능을 제거했습니다 .이것은 변경 사항을 설명하는 훌륭한 블로그 게시물입니다.
예를 들어,HTTP Action
를 지정하는 대신 매개 변수 메소드의 접 두부 및 경로 속성의 경로로 이제 둘 다HttpGet
로 수행됩니다. 그리고HttpPost
속성.[HttpGet("api/visits")]
WebApi
에서 마이그레이션하려는 경우 프로젝트, 여기 몇 가지 지침이 있습니다.마이그레이션을 원하지 않지만 프로젝트를 새로운
ASP.NET MVC
로 변환하려는 경우 버전, 당신은Web API Compatibility Shim
를 사용할 수 있습니다 . 여기와 여기에 그에 대한 지침이 있습니다.
관련 자료
- python - var = fun ()과 var = fun의 차이점
- Java에서 이러한 배열 초기화의 차이점은 무엇입니까?
- database design - Postgresql에서 float와 numeric의 차이점은 무엇입니까?
- c++ - &table [0] [0]과&table의 차이점은 무엇입니까?
- algorithm - 구현의 차이점은 무엇입니까?
- comdatastaxoss-> java-driver-core 및 comdatastaxcassandra-> cassandra-driver-core의 카산드라 차이점
- activex - new ActiveXObject ()와 WScriptCreateObject ()의 차이점은 무엇입니까?
- java - android sqlite - sqlite에서 두 항목의 차이를 계산하는 방법은 무엇입니까?
- regex - htaccess - "rewriterule ^-"과 "rewriterule ^ ( *) $/$1"의 차이점은 무엇입니까?
- key - R의 함수 내에서 두 데이터 세트 간의 차이를 계산할 때 데이터 세트의 ID를 유지하는 방법
- .net - C #에서 개체와 {}의 차이점은 무엇입니까?
- javascript - 익명 함수와 화살표 함수 사이의 d3js에서 선택으로 지적한 "this"의 차이점은 무엇입니까?
- optional - 와 |의 차이점은 무엇입니까? typescript에서 정의되지 않았습니까?
- MQ (RabbitMQ, ActiveMQ…)와 네트워크 라이브러리 (ACE, Asio, libevent…)의 차이점은 무엇입니까?
- Microsoft Azure에서 가용성 집합의 가용성 영역과 장애 도메인 기능의 차이점은 무엇입니까?
- amazon web services - KeyMarker와 Prefix의 차이점은 무엇입니까?
- javascript - eventvalue와 eventtargetvalue의 차이점
- android - 에뮬레이터와 물리적 장치로 프로그램을 실행하는 것의 차이점은 무엇입니까?
- rust - ʻimpl trait for t where t - trait2`와 ʻimpl trait for dyn trait2`의 차이점
- Asp.net Core 3.1 - aspnet 코어 31 - ajax 호출을 통해 list 로 파일 업로드 및 컨트롤러로 전송
- c# : RedirectToAction에서 개체 전달
- c# : mvc의 데이터베이스에서 개체를 삭제하는 방법은 무엇입니까?
- c# : System.InvalidOperationException : 체계가 이미 존재합니다 : [auhtorize]를 사용할 때 Identity.Application
- c# : 관리자 asp.net에서 전체 웹 양식의 미리보기를 표시하는 방법
- c# : 탐색 속성을 포함 할 때 Entity Framework Core가 "자체 참조 루프"를 만들지 못하도록하려면 어떻게해야합니까?
- c# : 지정된 간격으로 정기적으로 비동기 메서드 실행
- c# : 내 Asp.net 핵심 웹 애플리케이션은 거의 병렬 요청을 처리하지 않습니다.
- c# : ASP.NET 웹 사용자 컨트롤 라이브러리
- c# : 축 # 0의 데이터 열은 문자열 유형일 수 없습니다.-Google Charts
- c# : ASP.net MVC에서 여러 필드 검색 :보기에서 컨트롤러로 매개 변수 전달
이것에 대해 너무 많이 생각하고 있다고 생각합니다.
첫 번째 질문 "ASP.NET MVC 6에서 MVC 컨트롤러와 웹 API 컨트롤러의 차이점은 무엇입니까?" 그들이 다르다는 것을 전제로하지만 그렇지 않다. 병합되어 차이가 없습니다.
보기 결과를 반환하지 않는 동작 방법을 분리하기 위해 별도의 경로를 정의하려면 계속하십시오. 응용 프로그램을 구성하는 방법은 사용자에게 달려 있습니다. "웹 앱을 만드는 데 어떤 방법이 선호됩니까?" MVC 6을 오랫동안 사용하기 전까지는 더 일반적인 방법이 없을 것입니다.