2016-06-20 3 views
1

RestApi URL에 GET 요청을하여 JSON 데이터를 반환하는 메서드를 작성하고 있습니다. 디버그 모드에서 응용 프로그램을 실행할 때 응답하는 데이터 아래에 있습니다. 내가 var data = ..... 그게 전부 곳을보기에서 디버그를 추가 할 때ASP.NET HTTPClient 활성화 대기 요청 상태 얻기

public IActionResult Index() 
{ 
    // Methods RestMethod = new Methods(); 
    var data = Methods.Get("http://url/products", "domain\userid", "Password"); 

    return View(); 
} 

: 여기

public class Methods 
{ 
    public static async Task<JObject> Get(string url, string username, string password) 
    { 
     var credentials = new NetworkCredential(username, password); 
     HttpClientHandler handler = new HttpClientHandler { Credentials = credentials }; 
     HttpClient client = new HttpClient(handler); 
     // client.BaseAddress = new Uri(url); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); 

     HttpResponseMessage response = await client.GetAsync(url); 

     if (response.IsSuccessStatusCode) 
     { 
      return JObject.Parse(await response.Content.ReadAsStringAsync()); 
     } 
     return new JObject { response.StatusCode }; 
    } 
} 

내가 데이터에 액세스하려고 내보기입니다 : 여기

Id = 337, Status = WaitingForActivation, Method = "{null}", Result = "{Not yet computed}"

내 코드입니다 나는 waiting for activation을 얻고 있습니다.

정말 도움이됩니다. : 당신이 비동기를 사용하려는 경우

덕분에,

레이

+0

맞습니다. 현재 작업을 기다리는 중입니다 ... '데이터'는 'JObject'가 아니라 작업이라는 것을 명심하십시오. –

+0

흠 .. 그래서이'var data = await Methods.Get()'처럼'await'을 추가해야합니까? – Ray

+1

나는 그렇다고 생각한다. 이것은'Index' 메소드가 비동기 일 필요가 있음을 의미한다. –

답변

2

이/당신이 호출 엔트리 포인트부터 시작을해야 기다리고 있습니다. 현재 실행중인 작업을 반환하는 Get 메서드를 호출하지만 작업이 완료 될 때까지 기다리지는 않습니다. 가장 쉬운 수정이 Index 방법 코드입니다 그래서 같이 변경해야합니다 :

public async Task<IActionResult> Index() 
{ 
    // Methods RestMethod = new Methods(); 
    var data = await Methods.Get("http://url/products", "domain\userid", "Password"); 
    return View(); 
} 

또한 async/await에 대한 자세한 내용은 Stephen Cleary's blog를 참조 그는이 주제에 광범위에 작성도 잘 함정과 패턴을 알고있다.

+1

고맙습니다. 이제는 의미가 있습니다. :) – Ray