Browse Source

Merge pull request #8404 from abpframework/maliming/IRemoteStream

Try to set Position to 0 in RequestPayloadBuilder.
pull/8406/head
Ahmet Çotur 6 years ago
committed by GitHub
parent
commit
56b9c03f11
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 7
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/AbpRemoteStreamContentModelBinder.cs
  2. 36
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/RequestPayloadBuilder.cs
  3. 6
      framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController.cs
  4. 8
      framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController_Tests.cs

7
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/AbpRemoteStreamContentModelBinder.cs

@ -115,13 +115,6 @@ namespace Volo.Abp.AspNetCore.Mvc.ContentFormatters
}
}
}
else
{
postedFiles.Add(new RemoteStreamContent(request.Body)
{
ContentType = request.ContentType
});
}
}
}
}

36
framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/RequestPayloadBuilder.cs

@ -53,17 +53,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying
return null;
}
if (value is IRemoteStreamContent remoteStreamContent)
{
var content = new StreamContent(remoteStreamContent.GetStream());
content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(remoteStreamContent.ContentType);
content.Headers.ContentLength = remoteStreamContent.ContentLength;
return content;
}
else
{
return new StringContent(jsonSerializer.Serialize(value), Encoding.UTF8, MimeTypes.Application.Json);
}
return new StringContent(jsonSerializer.Serialize(value), Encoding.UTF8, MimeTypes.Application.Json);
}
private static HttpContent GenerateFormPostData(ActionApiDescriptionModel action, IReadOnlyDictionary<string, object> methodArguments)
@ -80,7 +70,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying
if (parameters.Any(x => x.BindingSourceId == ParameterBindingSources.FormFile))
{
var postDataBuilder = new MultipartFormDataContent();
var formData = new MultipartFormDataContent();
foreach (var parameter in parameters)
{
var value = HttpActionParameterHelper.FindParameterValue(methodArguments, parameter);
@ -91,32 +81,42 @@ namespace Volo.Abp.Http.Client.DynamicProxying
if (value is IRemoteStreamContent remoteStreamContent)
{
var streamContent = new StreamContent(remoteStreamContent.GetStream());
var stream = remoteStreamContent.GetStream();
if (stream.CanSeek)
{
stream.Position = 0;
}
var streamContent = new StreamContent(stream);
if (!remoteStreamContent.ContentType.IsNullOrWhiteSpace())
{
streamContent.Headers.ContentType = new MediaTypeHeaderValue(remoteStreamContent.ContentType);
}
postDataBuilder.Add(streamContent, parameter.Name, parameter.Name);
formData.Add(streamContent, parameter.Name, parameter.Name);
}
else if (value is IEnumerable<IRemoteStreamContent> remoteStreamContents)
{
foreach (var content in remoteStreamContents)
{
var streamContent = new StreamContent(content.GetStream());
var stream = content.GetStream();
if (stream.CanSeek)
{
stream.Position = 0;
}
var streamContent = new StreamContent(stream);
if (!content.ContentType.IsNullOrWhiteSpace())
{
streamContent.Headers.ContentType = new MediaTypeHeaderValue(content.ContentType);
}
postDataBuilder.Add(streamContent, parameter.Name, parameter.Name);
formData.Add(streamContent, parameter.Name, parameter.Name);
}
}
else
{
postDataBuilder.Add(new StringContent(value.ToString(), Encoding.UTF8), parameter.Name);
formData.Add(new StringContent(value.ToString(), Encoding.UTF8), parameter.Name);
}
}
return postDataBuilder;
return formData;
}
else
{

6
framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController.cs

@ -25,11 +25,11 @@ namespace Volo.Abp.AspNetCore.Mvc.ContentFormatters
[HttpPost]
[Route("Upload")]
public async Task<string> UploadAsync([FromBody]IRemoteStreamContent streamContent)
public async Task<string> UploadAsync(IRemoteStreamContent file)
{
using (var reader = new StreamReader(streamContent.GetStream()))
using (var reader = new StreamReader(file.GetStream()))
{
return await reader.ReadToEndAsync() + ":" + streamContent.ContentType;
return await reader.ReadToEndAsync() + ":" + file.ContentType;
}
}
}

8
framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController_Tests.cs

@ -1,5 +1,6 @@
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Shouldly;
@ -25,8 +26,11 @@ namespace Volo.Abp.AspNetCore.Mvc.ContentFormatters
var memoryStream = new MemoryStream();
await memoryStream.WriteAsync(Encoding.UTF8.GetBytes("UploadAsync"));
memoryStream.Position = 0;
requestMessage.Content = new StreamContent(memoryStream);
requestMessage.Content.Headers.Add("Content-Type", "application/rtf");
var streamContent = new StreamContent(memoryStream);
streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/rtf");
requestMessage.Content = new MultipartFormDataContent {{streamContent, "file", "file"}};
var response = await Client.SendAsync(requestMessage);

Loading…
Cancel
Save