如何使用 Asp.net Web Api 项目上传文件?

How to upload file with Asp.net Web Api project?

我有一个 Web API 项目要从移动应用程序中使用,我正在尝试制作一个文件上传控制器。 C# 中的资源很少,我找不到任何对 VB.NET.

有用的东西

我尝试将下面的代码从 C# 转换为 VB.NET,但显示 "Move is not a member of MultiPartFileData"。

Imports System
Imports System.Collections.Generic
Imports System.IO
Imports System.Linq
Imports System.Net
Imports System.Net.Http
Imports System.Threading.Tasks
Imports System.Web
Imports System.Web.Http

Namespace HelloWorld.Controller
    Public Class FileUploadingController
        Inherits ApiController

        <HttpPost>
        <Route("api/FileUploading/UploadFile")>
        Public Async Function UploadFile() As Task(Of String)
            Dim ctx = HttpContext.Current
            Dim root = ctx.Server.MapPath("~/App_Data")
            Dim provider = New MultipartFormDataStreamProvider(root)

            Try
                Await Request.Content.ReadAsMultipartAsync(provider)

                For Each file In provider.FileData
                    Dim name = file.Headers.ContentDisposition.FileName
                    name = name.Trim(""""c)
                    Dim localFileName = file.LocalFileName
                    Dim filePath = Path.Combine(root, name)
                    File.Move(localFileName, filePath)
                Next

            Catch e As Exception
                Return $"Error: {e.Message}"
            End Try

            Return "File uploaded!"
        End Function
    End Class
End Namespace

该错误消息意味着编译器认为您正在尝试从 MultiPartFileData class 调用方法。 MultiPartFileData 类型的变量是在 For Each 循环中初始化的名为 file(注意小写)的变量。

相反,您想从 System.IO.File class(注意大写)调用 Move 方法。

VB.NET 服务(总是 运行 在后台查找您键入时捕获的错误)不区分大小写,因此,对于它来说,这两个名称是相同的,这里会出现您在输入时发出的错误对该行进行编码。

最好的解决方案是当您计划使用 class System.IO.File 时,避免为您的变量使用 file 这样的名称。否则你可以简单地以这种方式添加完整的限定方法的名称

System.IO.File.Move(localFileName, filePath)