Как упомянул joehoper, в настоящее время мы можем передавать дополнительную информацию на сервер, используя заголовок Http, см. Мой дизайн кода.
На стороне сервера.
Сервисный интерфейс.
[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json,BodyStyle =WebMessageBodyStyle.Bare)]
Task UploadStream(Stream stream);
Реализация службы.
public async Task UploadStream(Stream stream)
{
var context = WebOperationContext.Current;
string filename = context.IncomingRequest.Headers["filename"].ToString();
string ext = Path.GetExtension(filename);
using (stream)
{
//save the image under the Uploads folder on the server-side(root directory).
using (var file = File.Create(Path.Combine(HostingEnvironment.MapPath("~/Uploads"), Guid.NewGuid().ToString() + ext)))
{
await stream.CopyToAsync(file);
}
}
}
На стороне клиента.
В разделе тела будет размещен двоичный файлданные, как и вы.
Кроме того, WCF не поддерживает данные формы по умолчанию, в то время как мы можем воспользоваться сторонней библиотекой, которая позволяет нам передавать параметр формы данных.
https://archive.codeplex.com/?p=multipartparser
Тогда мы можем опубликовать данные формы для передачи информации о файле. Пожалуйста, обратитесь к приведенному ниже коду.
public async Task UploadStream(Stream stream)
{
MultipartParser parser = new MultipartParser(stream);
if (parser.Success)
{
//absolute filename, extension included.
var filename = parser.Filename;
var filetype = parser.ContentType;
var ext = Path.GetExtension(filename);
using (var file = File.Create(Path.Combine(HostingEnvironment.MapPath("~/Uploads"), Guid.NewGuid().ToString() +ext)))
{
await file.WriteAsync(parser.FileContents, 0, parser.FileContents.Length);
}
}
}
Наконец, имеется встроенная поддержка для передачи данных формы в Asp.net WebAPI.
https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/sending-html-form-data-part-2
Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.