>

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

    이것에 대해 너무 많이 생각하고 있다고 생각합니다.

    첫 번째 질문 "ASP.NET MVC 6에서 MVC 컨트롤러와 웹 API 컨트롤러의 차이점은 무엇입니까?" 그들이 다르다는 것을 전제로하지만 그렇지 않다. 병합되어 차이가 없습니다.

    보기 결과를 반환하지 않는 동작 방법을 분리하기 위해 별도의 경로를 정의하려면 계속하십시오. 응용 프로그램을 구성하는 방법은 사용자에게 달려 있습니다. "웹 앱을 만드는 데 어떤 방법이 선호됩니까?" MVC 6을 오랫동안 사용하기 전까지는 더 일반적인 방법이 없을 것입니다.

  • 답변 # 2

    메이슨이 질문에 완벽하게 대답하는 동안, 질문에 대한 향후 방문자에게 도움이 될 차이점과 리소스에 대한 추가 정보를 제공하고자합니다.

    Microsoft는 ApiController 를 합병  그리고 Controller  하나의 클래스로, Controller . 그렇게하기 위해, 그들은 ApiController 의 일부 기능을 제거했습니다 .

    이것은 변경 사항을 설명하는 훌륭한 블로그 게시물입니다.

    예를 들어, HTTP Action 를 지정하는 대신  매개 변수 메소드의 접 두부 및 경로 속성의 경로로 이제 둘 다 HttpGet 로 수행됩니다.  그리고 HttpPost  속성.

    [HttpGet("api/visits")]
    
    

    WebApi 에서 마이그레이션하려는 경우  프로젝트, 여기 몇 가지 지침이 있습니다.

    마이그레이션을 원하지 않지만 프로젝트를 새로운 ASP.NET MVC 로 변환하려는 경우  버전, 당신은 Web API Compatibility Shim 를 사용할 수 있습니다 . 여기와 여기에 그에 대한 지침이 있습니다.

  • 이전 Android SDK 버전마다 다른 테마
  • 다음 linux - 마운트하지 않고 가상 플로피 이미지를 만드시겠습니까?