2017-12-01 4 views
0

VSC 2017로 업그레이드 한 이래로 HttpContext.Response 함수가 "스레드가 중단되었습니다."와 같이 사용하기가 매우 까다로워졌습니다. 올바르게 처리했습니다. 때로는 제대로 작동하지만 오류가 발생하여 종료 될 가능성이 있습니다. 예를 들어 명령 Response.Redirect를의 말에Visual Studio에서 신뢰할 수없는 HttpContext.Response 커뮤니티 2017

HttpContext.Current.ApplicationInstance.CompleteRequest(); 

을 추가하지만, 이러한 효과가 없습니다 :

는이 오류 나 자신을 처리하는 일반적인 단계를 시도했습니다.

특정 예 : GridView를 Excel 스프레드 시트로 내보내는 응용 프로그램이 있습니다. 스프레드 시트 용 데이터를 수집하고 서식을 지정하는 단계에 따라 파일은 아래 단계에 따라 작성됩니다.

using (var memoryStream = new MemoryStream()) 
{ 
    var resp = System.Web.HttpContext.Current.Response; 
    resp.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
    resp.AddHeader("content-disposition", "attachment; filename=" + FileName + ".xlsx"); 
    excel.SaveAs(memoryStream); 
    memoryStream.WriteTo(resp.OutputStream); 
    resp.Flush(); 
    resp.End(); 
} 

당신은 그 응답이 종료 명시 적으로되는 것을 볼 수 있지만, 여전히 같은 오류와 함께 실패합니다. 어떤 브라우저를 사용하든 관계없이 .NET Framework 4.5.2를 사용하고 있습니다. 지원하는 서버 중 가장 높은 서버입니다. 누구든지 아이디어가 있습니까? 지원하지 않는 것이 코어를 사용하여 대 2017 년

답변

0

추가 조사에서 Response는 모든 다양한 응용 프로그램에서 AJAX Update Panel 컨트롤과 잘 작동하지 않는다고 판단했습니다. 위에서 설명한 내 업데이트 패널에서 설명한 gridview-to-spreadsheet 함수를 실행하는 LinkButton을 이동하면 예상대로 실행되었습니다.

[업데이트] 패널에서 응답을 트리거하지 마십시오.

2

HttpContext.Current 그래서 기본적으로 대신 그들이 다른 일을 제공하는의

private readonly IHttpContextAccessor _httpContextAccessor; 
    _httpContextAccessor.HttpContext.Response.Redirect(redirectUrl); 
대답에 도움이됩니다 있도록 2017

희망 VS에서 다음과 같이 액세스 할 수 있습니다

당신

+0

불행히도, 이것은 도움이되지 않습니다. 코어가 아닌 "표준".NET을 사용하므로이 인터페이스를 사용할 수 없습니다. 그래도 제안을 주셔서 감사합니다. –