2017-01-03 1 views
0

제 문제는 제가 ASP.net MVC/API 자습서를 따라 왔다고합니다. MVC 측면에서 작동하는 컨트롤러가 있습니다. 로 변경하는 방법을 일을 내가 다른 프로젝트를 진행 한 다음 예를 살펴 때ASP.NET MVC/웹 컨트롤러에서 JSON을 반환하는 방법은 무엇입니까?

public class DestinationController : Controller 
{ 
    private ebstestEntities db = new ebstestEntities(); 

    // GET: Destination 
    public async Task<ActionResult> Index() 
    { 

     return View(await db.CI_DEST_ALL_VARIABLES.ToListAsync()); 
    } 

는 그러나, 나는 것 캔트 : 예를 들어이 잘 작동하고보기에 내 데이터를 반환 위의 프로젝트 컨트롤러와 잘 어울립니다.

// GET: Destination 
public async Task<ActionResult> IndexVM() 
{ 
    var model = new BeerIndexVM; 

    using (var db = new AngularDemoContext()) 
    { 
     model.Beers = db.Beers.ToList(); 
    } 
    return Json(model, JsonRequestBehavior.AllowGet); 
} 
+1

"위의 프로젝트 컨트롤러에 맞게 변경하는 방법을 알아낼 수 없습니다." 문제를 설명하지 않으면 도움을 줄 수 없습니다. – Amy

+1

또한 Asp.Net MVC는 웹 API와 별개이며 별도입니다. 그것은 "ASP.Net MVC 웹 API"가 아닙니다. 질문에 웹 API 관련 코드가 표시되지 않습니다. – Amy

+1

나는 그 마지막 문장을 지울 것이다. 오프 사이트 리소스를 요청하는 것은 여러분의 질문을 닫는 이유입니다 – Marco

답변

1

, 당신은 await 메소드 호출해야합니다. ToList()의 비동기 버전은 ToListAsync()입니다. 따라서 앞에서 await과 같은 메서드를 호출하면 await db.Beers.ToListAsync()이 생깁니다. 그 변수를 모델에 할당하면 황금색이어야합니다.

완전한 방법이 특정 인스턴스에서이 필요하지 비록

// GET: Destination 
[HttpGet] 
public async Task<ActionResult> IndexVM() 
{ 
    var model = new BeerIndexVM(); 

    using (var db = new AngularDemoContext()) 
    { 
     model.Beers = await db.Beers.ToListAsync(); 
    } 
    return Json(model, JsonRequestBehavior.AllowGet); 
} 

가 나는 또한,이 방법에서 HTTP 동사 속성을 추가합니다.

1

"AcceptVerbs"주석이 누락 된 것 같습니다. 당신의 방법 서명이 async Task<ActionResult> 때문에

[AcceptVerbs(HttpVerbs.Get)] 
public async Task<ActionResult> MethodName() 
{ 
    return json(model, JSonRequestBehavior.AllowGet); 
} 
관련 문제