[英]Error converting PushStreamContent C# code to VB.Net WebAPI 2
I'm having some difficulty converting this C# code to a WebAPI 2 VB.Net project. 我在将此C#代码转换为WebAPI 2 VB.Net项目时遇到了一些困难。
Here's the original C# code 这是原始的C#代码
[HttpGet]
public HttpResponseMessage FromImages() {
var imageStream = new ImageStream();
Func<Stream, HttpContent, TransportContext, Task> func = imageStream.WriteToStream;
var response = Request.CreateResponse();
response.Content = new PushStreamContent(func);
response.Content.Headers.Remove("Content-Type");
response.Content.Headers.TryAddWithoutValidation("Content-Type", "multipart/x-mixed-replace;boundary=" + imageStream.Boundary);
return response;
}
internal class ImageStream {
public object Boundary { get; private set; } = "HintDesk";
public async Task WriteToStream(Stream outputStream, HttpContent content, TransportContext context) {
byte[] newLine = Encoding.UTF8.GetBytes("\r\n");
foreach (var file in Directory.GetFiles(@"TestData\Images", "*.jpg")) {
var fileInfo = new FileInfo(file);
var header = $"--{Boundary}\r\nContent-Type: image/jpeg\r\nContent-Length: {fileInfo.Length}\r\n\r\n";
var headerData = Encoding.UTF8.GetBytes(header);
await outputStream.WriteAsync(headerData, 0, headerData.Length);
await fileInfo.OpenRead().CopyToAsync(outputStream);
await outputStream.WriteAsync(newLine, 0, newLine.Length);
await Task.Delay(1000 / 30);
}
}
}
Here's the VB.Net translation 这是VB.Net的翻译
<HttpGet> _
Public Function FromImages() As HttpResponseMessage
Dim imageStream = New ImageStream()
Dim func As Func(Of Stream, HttpContent, TransportContext, Task) = imageStream.WriteToStream
Dim response = Request.CreateResponse()
response.Content = New PushStreamContent(func)
response.Content.Headers.Remove("Content-Type")
response.Content.Headers.TryAddWithoutValidation("Content-Type", "multipart/x-mixed-replace;boundary=" + imageStream.Boundary)
Return response
End Function
Friend Class ImageStream
Public Function WriteToStream(outputStream As Stream, content As HttpContent, context As TransportContext) As Task
Dim newLine As Byte() = Encoding.UTF8.GetBytes(vbCr & vbLf)
For Each file As var In Directory.GetFiles("TestData\Images", "*.jpg")
Dim fileInfo = New FileInfo(file)
Dim header = "--{Boundary}" & vbCr & vbLf & "Content-Type: image/jpeg" & vbCr & vbLf & "Content-Length: {fileInfo.Length}" & vbCr & vbLf & vbCr & vbLf
Dim headerData = Encoding.UTF8.GetBytes(header)
Await outputStream.WriteAsync(headerData, 0, headerData.Length)
Await fileInfo.OpenRead().CopyToAsync(outputStream)
Await outputStream.WriteAsync(newLine, 0, newLine.Length)
Await Task.Delay(1000 / 30)
Next
End Function
End Class
I'm seeing two problems: 我看到两个问题:
On this line is a 'Argument not specified for parameter 'context' of 'Public Function WriteToStream...' 在此行上是“未为'公共函数WriteToStream ...'的参数'context'指定参数”
Dim func As Func(Of Stream, HttpContent, TransportContext, Task) = imageStream.WriteToStream Dim func As Func(Of Stream,HttpContent,TransportContext,Task)= imageStream.WriteToStream
An Overload resolution failed because no accessible 'New' can be called with these arguments 超载解析失败,因为无法使用这些参数调用可访问的“新建”
response.Content = New PushStreamContent(func) response.Content =新的PushStreamContent(func)
I imagine that I didn't translate this correctly, but I'm having difficulty finding any examples in VB.Net for what I'm trying to accomplish. 我想我没有正确地翻译它,但是我很难在VB.Net中找到想要完成的示例。 Can someone tell me what I'm doing wrong?
有人可以告诉我我在做什么错吗?
The main problem is that you are not using 'AddressOf' - here's the VB equivalent: 主要问题是您没有使用'AddressOf'-这是VB的等效项:
Option Infer On
Imports Microsoft.VisualBasic
<HttpGet>
Public Function FromImages() As HttpResponseMessage
Dim imageStream = New ImageStream()
Dim func As Func(Of Stream, HttpContent, TransportContext, Task) = AddressOf imageStream.WriteToStream
Dim response = Request.CreateResponse()
response.Content = New PushStreamContent(func)
response.Content.Headers.Remove("Content-Type")
response.Content.Headers.TryAddWithoutValidation("Content-Type", "multipart/x-mixed-replace;boundary=" & imageStream.Boundary)
Return response
End Function
Friend Class ImageStream
Private privateBoundary As Object = "HintDesk"
Public Property Boundary() As Object
Get
Return privateBoundary
End Get
Private Set(ByVal value As Object)
privateBoundary = value
End Set
End Property
Public Async Function WriteToStream(ByVal outputStream As Stream, ByVal content As HttpContent, ByVal context As TransportContext) As Task
Dim newLine() As Byte = Encoding.UTF8.GetBytes(ControlChars.CrLf)
For Each file In Directory.GetFiles("TestData\Images", "*.jpg")
Dim fileInfo = New FileInfo(file)
Dim header = $"--{Boundary}" & ControlChars.CrLf & "Content-Type: image/jpeg" & ControlChars.CrLf & "Content-Length: {1}" & ControlChars.CrLf & ControlChars.CrLf
Dim headerData = Encoding.UTF8.GetBytes(header)
Await outputStream.WriteAsync(headerData, 0, headerData.Length)
Await fileInfo.OpenRead().CopyToAsync(outputStream)
Await outputStream.WriteAsync(newLine, 0, newLine.Length)
Await Task.Delay(1000 \ 30)
Next file
End Function
End Class
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.