2017-09-26 1 views
0

일괄 요청을위한 미들웨어를 작성하려고합니다 .net 2.0. 지금까지 요청을 분할하고 각 요청을 컨트롤러로 전달합니다. 컨트롤러가 값을 반환하지만 어떤 이유로 컨트롤러에 구문 분석 된 생성 된 컨텍스트의 응답이 나에게 몸에 NullStream을 제공하기 때문에 설치에 놓친 것이 있다고 생각합니다.생성 된 컨텍스트에 대한 응답이 나에게 NullStream을 계속 제공함

코드는 다음과 같습니다

var json = await streamHelper.StreamToJson(context.Request.Body); 

var requests = JsonConvert.DeserializeObject<IEnumerable<RequestModel>>(json); 

var responseBody = new List<ResponseModel>(); 

foreach (var request in requests) 
{ 
    var newRequest = new HttpRequestFeature 
    { 
     Body = request.Body != null ? new MemoryStream(Encoding.ASCII.GetBytes(request.Body)) : null, 
     Headers = context.Request.Headers, 
     Method = request.Method, 
     Path = request.RelativeUrl, 
     PathBase = string.Empty, 
     Protocol = context.Request.Protocol, 
     Scheme = context.Request.Scheme, 
     QueryString = context.Request.QueryString.Value 
    }; 

    var newRespone = new HttpResponseFeature(); 
    var requestLifetimeFeature = new HttpRequestLifetimeFeature(); 

    var features = CreateDefaultFeatures(context.Features); 
    features.Set<IHttpRequestFeature>(newRequest); 
    features.Set<IHttpResponseFeature>(newRespone); 
    features.Set<IHttpRequestLifetimeFeature>(requestLifetimeFeature); 

    var innerContext = _factory.Create(features); 
    await _next(innerContext); 

    var responseJson = await streamHelper.StreamToJson(innerContext.Response.Body); 

내가 innerContext.Response.Body가 설정되어 있지 않은 이후, 나는 설정에서 누락 무엇인지 모르겠어요.

내가 테스트를 위해 사용하는 엔드 포인트 중 하나와 그 당한다 내가 오류, 또는 작동하는 두 가지 오류를 발견했습니다이

[Route("api/[controller]")] 
public class ValuesController : Controller 
{ 
    // GET api/values 
    [HttpGet] 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2" }; 
    } 
} 

답변

0

것 같습니다.

가 우선이 HttpResponseFeature 때문에

var newRespone = new HttpResponseFeature{ Body = new MemoryStream() }; 

내 newResponse을 변경했다 생성자에서 Stream.Null에 몸을 설정합니다.

이 작업이 끝나면 Body는 그것을 읽으려고 할 때 빈 문자열을 계속 유지했습니다. 0으로 위치를 설정하여 수정 됨

innerContext.Response.Body.Position = 0; 
관련 문제