【问题标题】:Client code to upload file via ASP.NET MVC WebApi通过 ASP.NET MVC WebApi 上传文件的客户端代码
【发布时间】:2017-03-06 19:03:25
【问题描述】:

我正在尝试编写代码以通过 WinForm 应用程序将文件上传到 WebApi。

WebApi 代码如下:

[HttpPost]
[Route("UploadEnvelope")]
[HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
public Task<HttpResponseMessage> PostUploadEnvelope()
{
    HttpRequestMessage request = this.Request;
    if (!request.Content.IsMimeMultipartContent())
    {
        throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
    }

    string root = System.Web.HttpContext.Current.Server.MapPath("~/App_Data/uploads");
    var provider = new MultipartFormDataStreamProvider(root);

    var task = request.Content.ReadAsMultipartAsync(provider).ContinueWith<HttpResponseMessage>(o =>
        {
            foreach (MultipartFileData fileData in provider.FileData)
            {
                if (string.IsNullOrEmpty(fileData.Headers.ContentDisposition.FileName))
                {
                    return Request.CreateResponse(HttpStatusCode.NotAcceptable, "This request is not properly formatted");
                }
                string fileName = fileData.Headers.ContentDisposition.FileName;
                if (fileName.StartsWith("\"") && fileName.EndsWith("\""))
                {
                    fileName = fileName.Trim('"');
                }
                if (fileName.Contains(@"/") || fileName.Contains(@"\"))
                {
                    fileName = Path.GetFileName(fileName);
                }
                File.Move(fileData.LocalFileName, Path.Combine(root, fileName));
            }

            return new HttpResponseMessage()
            {
                Content = new StringContent("Files uploaded.")
            };
        }
    );
    return task;
}

但我不确定如何调用它并在客户端应用程序中传递文件。

static string UploadEnvelope(string filePath, string token, string url)
{
    using (var client = new HttpClient())
    {
        client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);


        // How to pass file here ??? 

        var response = client.GetAsync(url + "/api/Envelope/UploadEnvelope").Result;

        return response.Content.ReadAsStringAsync().Result;
    }
}

欢迎任何帮助或建议。提前致谢!

【问题讨论】:

    标签: c# asp.net-mvc file-upload asp.net-web-api2


    【解决方案1】:

    首先,您使用的是用于阅读的Get 方法。您必须改用Post

    尝试以下方法:

    public static string UploadEnvelope(string  filePath,string token, string url)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
            using (var content = new MultipartFormDataContent("Envelope" + DateTime.Now.ToString(CultureInfo.InvariantCulture)))
            {
                content.Add(new StreamContent(new MemoryStream(File.ReadAllBytes(filePath))), "filename", "filename.ext");
                using (var message = await client.PostAsync(url + "/api/Envelope/UploadEnvelope", content))
                {
                    var input = await message.Content.ReadAsStringAsync();
                    return "success";
                }
            }
        }
    }
    

    注意:对于大文件,您必须更改 IIS web.config 上的配置。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-18
    • 2010-12-26
    • 2018-08-18
    • 2011-06-22
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多