C#/.NET RestSharp网络组件实现上传文件到远程服务器【可跨域传文件】

以前给大家分享了一个C#/.NET的网络组件–RestSharp,具体请参考:推荐一个.NET(C#)的HTTP辅助类组件–restsharp

今天再给大家示范一下如何应用RestSharp这个网络组件来实现可跨域的文件上传功能。

在文章的末尾我会把这个示例项目的源码下载发布出来。

本项目由一个客户端和一个ASP.NET WEB API 2来演示。客户端主要用于模拟用户的上传文件操作,而WEB API则是来接收用户上传的文件。在这里,我只贴出这两个部分的核心代码。

首先是WEB API(RestSharpUploadFileController.cs):

using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http;

namespace RsUploadFileDemo.Web.Controllers
{
  [RoutePrefix("api/upload")]
  public class RestSharpUploadFileController : ApiController
  {
    [Route("rs")]
    [HttpPost]
    public HttpResponseMessage Upload()
    {
      HttpResponseMessage response = null;
      var request = HttpContext.Current.Request;
      if (request.Files.Count > 0)
      {
        var fileNameList = new List<string>();
        foreach (string file in request.Files)
        {
          var f = request.Files[file];
          var fileSavePath = HttpContext.Current.Server.MapPath("~/uploads/" + f.FileName);
          f.SaveAs(fileSavePath);
          fileNameList.Add(fileSavePath);
        }
        response = Request.CreateResponse(HttpStatusCode.OK, fileNameList);
      }
      else
      {
        response = Request.CreateResponse(HttpStatusCode.BadRequest);
      }
      return response;
    }
  }
}

其次是客户端(FrmMain.cs):

private void btnUpload_Click(object sender, EventArgs e)
    {
      var fileLocation = @"D:\RestSharp.dll";
      try
      {
        var request = new RestRequest(Method.POST);
        request.AddFile("file", fileLocation);

        //calling server with restClient
        var restClient = new RestClient {BaseUrl = new Uri("http://localhost:57546/api/upload/rs")};
        restClient.ExecuteAsync(request, (response) =>
        {
          if (response.StatusCode == HttpStatusCode.OK)
          {
            MessageBox.Show("上传成功...\n" + response.Content);
          }
          else
          {
            MessageBox.Show(string.Format("出错啦:{0}", response.Content));
          }
        });        
      }
      catch (Exception ex)
      {
        MessageBox.Show(string.Format("出错啦:{0}", ex.Message));
      }
    }

需要注意的另一个问题是:我把WEB API的默认返回类型设置成了JSON格式的,这个设置只需要修改一下Global.asax.cs文件即可,修改后的Global.asax.cs文件如下:

using System.Net.Http.Formatting;
using System.Net.Http.Headers;
using System.Web;
using System.Web.Http;

namespace RsUploadFileDemo.Web
{
  public class WebApiApplication : HttpApplication
  {
    protected void Application_Start()
    {
      GlobalConfiguration.Configure(WebApiConfig.Register);
      GlobalConfiguration.Configuration.Formatters.XmlFormatter.MediaTypeMappings.Add(new QueryStringMapping("xml", "true", "application/xml"));
      GlobalConfiguration.Configuration.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
    }
  }
}

好了,以上就是这个关于使用RestSharp上传文件到远程服务器的示例的核心代码了,如果你有兴趣研究一下的话,可以戳【C#/.NET RestSharp网络组件实现上传文件到远程服务器[源码]】来下载。

最后,如果你喜欢这篇文章,或者是觉得文章内容对你有帮助的话,那就请动动你的手,为我点个赞吧^_^

本文同步发布至:图享 » C#/.NET RestSharp网络组件实现上传文件到远程服务器【可跨域传文件】

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏恰童鞋骚年

ASP.Net请求处理机制初步探索之旅 - Part 3 管道

开篇:上一篇我们了解了一个ASP.Net页面请求的核心处理入口,它经历了三个重要的入口,分别是:ISAPIRuntime.ProcessRequest()、Ht...

16820
来自专栏ASP.NETCore

在ASP.NET Core中怎么使用HttpContext.Current

  我们都知道,ASP.NET Core作为最新的框架,在MVC5和ASP.NET WebForm的基础上做了大量的重构。如果我们想使用以前版本中的HttpCo...

24040
来自专栏大内老A

Enterprise Library深入解析与灵活应用(7):再谈PIAB与Unity之间的集成

在EnteLib中,PIAB(Policy Injection Application Block)和Unity的定位是轻量级的AOP框架和IoC容器(Cont...

212100
来自专栏菩提树下的杨过

Oracle:ODP.NET Managed 小试牛刀

“ODP.NET Managed”发布已经有一段时间了,近期正好有一个新项目,想尝试用一下,参考园子里的文章:《.NET Oracle Developer的福音...

29160
来自专栏技术小讲堂

ASP.NET AJAX(15)__构建高性能ASP.NET AJAX应用UpdatePanel的性能问题使用UpdatePanel的注意事项脚本加载避免脚本阻塞页面显示AjaxControlTool

UpdatePanel的性能问题 在UpdatePanle使用的时候,它每次的更新都是将整个页面回送的,而且也会加上一些他更新的标记,所以往往它传递的数据量比传...

333100
来自专栏张善友的专栏

当调用GetAuthorizationGroups() 的错误-“试图访问卸载的应用程序域“(Exception from HRESULT: 0x80131014)解决方案

针对 Windows® 平台,Microsoft 提供了三个主要目录平台:Active Directory® 域服务、每台 Windows 计算机上的本地安全帐...

23070
来自专栏me的随笔

ASP.NET MVC5请求管道和生命周期

请求管道是一些用于处理HTTP请求的模块组合,在ASP.NET中,请求管道有两个核心组件:IHttpModule和IHttpHandler。所有的HTTP请求都...

15730
来自专栏恰童鞋骚年

.NET Core微服务之基于MassTransit实现数据最终一致性(Part 1)

  关于数据一致性的文章,园子里已经有很多了,如果你还不了解,那么可以通过以下的几篇文章去快速地了解了解,有个感性认识即可。

15450
来自专栏微服务

ASP.NET Core 依赖注入

一、什么是依赖注入(Denpendency Injection) 这也是个老身常谈的问题,到底依赖注入是什么? 为什么要用它? 初学者特别容易对控制反转IOC(...

32580
来自专栏木宛城主

ASP.NET MVC 随想录——探索ASP.NET Identity 身份验证和基于角色的授权,中级篇

在前一篇文章中,我介绍了ASP.NET Identity 基本API的运用并创建了若干用户账号。那么在本篇文章中,我将继续ASP.NET Identity 之...

45060

扫码关注云+社区

领取腾讯云代金券