Rest在asp.net MVC下使用的方法介绍

本篇文章主要介绍了asp.net mvc下使用rest的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

前言

最近做了下个MVC的项目,需要用到rest接口,与java写的应用程序通信,包括数据的接收和发送,那么我将用实用的角度来全面的讲解一下它的使用方法

一、创建rest服务

首先创建一个Asp.Net Web应用程序(我这里用的是Visual Studio 2013,它已经内置了Web API2)。

 Rest在asp.net MVC下使用的方法介绍  

在出来的模板中选择Empty(空项目),并勾选WebAPI。点击确定后,就创建了一个空的WebAPI服务。

 Rest在asp.net MVC下使用的方法介绍  

此时只有一个空项目,还没有任何功能,在进行下一步之前,首先我们来看一下REST的基本操作模型,大致可以分为如下四种:

POST — 创建资源

GET — 检索资源

PUT — 更新资源

DELETE — 删除资源

非常经典的CRUD模型。在Web API中实现这样一个的模型是非常简单的,直接使用向导建一个Controller即可

 Rest在asp.net MVC下使用的方法介绍

Rest在asp.net MVC下使用的方法介绍  

如果用传统的向导,记得把向导后面的那个1给去掉:

默认的模板内容如下:

   public class ValuesController : ApiController  {    // GET api/    publicIEnumerable Get()    {      returnnewstring[] { "value1", "value2" };    }    // GET api//5    publicstring Get(int id)    {      return"value";    }    // POST api/    publicvoid Post([FromBody]string value)    {    }    // PUT api//5    publicvoid Put(int id, [FromBody]string value)    {    }    // DELETE api//5    publicvoid Delete(int id)    {    }  }

登录后复制

这其实已经帮我们实现了一个最基本的服务了,这样别人就可以访问我们的服务中的方法

二、调用其它应用程序的rest服务

1、RestClient类

为了便于使用,我们需要封装客房端的rest类,话不多说,我们直接上这个类的代码:

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;using System.Text;using System.Web;namespace OilDigital.A2_A27.Web{  public class RestClient  {    public string EndPoint { get; set; }  //请求的url地址     public HttpVerb Method { get; set; }  //请求的方法     public string ContentType { get; set; } //格式类型:我用的是application/json,text/xml具体使用什么,看需求吧     public string PostData { get; set; }  //传送的数据,当然了我使用的是json字符串     public RestClient()    {      EndPoint = "";      Method = HttpVerb.GET;      ContentType = "application/x-www-form-urlencoded";      PostData = "";    }    public RestClient(string endpoint)    {      EndPoint = endpoint;      Method = HttpVerb.GET;      ContentType = "application/json";      PostData = "";    }    public RestClient(string endpoint, HttpVerb method)    {      EndPoint = endpoint;      Method = method;      ContentType = "application/json";      PostData = "";    }    public RestClient(string endpoint, HttpVerb method, string postData)    {      EndPoint = endpoint;      Method = method;      ContentType = "application/json";      PostData = postData;    }    public RestClient(string endpoint, HttpVerb method, string postData, string contentType)    {      EndPoint = endpoint;      Method = method;      ContentType = contentType;      PostData = postData;    }    public string MakeRequest()    {      return MakeRequest("");    }    public string MakeRequest(string parameters)    {      var request = (HttpWebRequest)WebRequest.Create(EndPoint + parameters);      request.Method = Method.ToString();      request.ContentType = ContentType;            if (!string.IsNullOrEmpty(PostData) && Method == HttpVerb.POST)//如果传送的数据不为空,并且方法是post       {        var encoding = new UTF8Encoding();           var bytes = Encoding.GetEncoding("iso-8859-1").GetBytes(PostData);//编码方式按自己需求进行更改,我在项目中使用的是UTF-8         request.ContentLength = bytes.Length;        using (var writeStream = request.GetRequestStream())        {          writeStream.Write(bytes, 0, bytes.Length);        }      }      if (!string.IsNullOrEmpty(PostData) && Method == HttpVerb.PUT)//如果传送的数据不为空,并且方法是put       {        var encoding = new UTF8Encoding();        var bytes = Encoding.GetEncoding("iso-8859-1").GetBytes(PostData);//编码方式按自己需求进行更改,我在项目中使用的是UTF-8         request.ContentLength = bytes.Length;        using (var writeStream = request.GetRequestStream())        {          writeStream.Write(bytes, 0, bytes.Length);        }      }      using (var response = (HttpWebResponse)request.GetResponse())      {        var responseValue = string.Empty;        if (response.StatusCode != HttpStatusCode.OK)        {          var message = String.Format("Request failed. Received HTTP {0}", response.StatusCode);          throw new ApplicationException(message);        }        // grab the response         using (var responseStream = response.GetResponseStream())        {          if (responseStream != null)            using (var reader = new StreamReader(responseStream))            {              responseValue = reader.ReadToEnd();            }        }        return responseValue;      }    }  }  public enum HttpVerb  {    GET,      //method 常用的就这几样,当然你也可以添加其他的  get:获取  post:修改  put:写入  delete:删除     POST,    PUT,    DELETE  }}

登录后复制

2、RestClient类使用

有了这个类后我们就很方便的去调用别人的rest服务了,使用方法如下:

①,基本的调用:

var client = new RestClient();string endPoint = @"http:\myRestService.compi";var client = new RestClient(endPoint);var json = client.MakeRequest();

登录后复制

②,如果你想带入参数

var json = client.MakeRequest("?param=0");

登录后复制

③,使用最多的方式

var client = new RestClient();client.EndPoint = @"http:\myRestService.compi"; ;client.ContentType = "application/json";client.Method = HttpVerb.POST;client.PostData = "{postData: value}";var json = client.MakeRequest();

登录后复制

三、我自己项目中的使用

1、首先我测试了一下,我调用我自己的rest服务的带参的get方法,当然我这里传的参数直接写在url的后面在,参数形式是string,所以接收的get方法的形参也要改成string,这样你就

可以接收到传过去的参数了。当然别人应用程序也是可以调的。只要把url给他就行了。

///     /// 从接口中获取当前用户所有信息    ///     /// 用户ID    /// json对象    public string GetCurrentUserInfo()    {      string userId = GetCurrentUserId();      string endPoint = "http://localhost:100/Api/RestService/"+userId;      var client = new RestClient(endPoint);      var userInfo = client.MakeRequest();      return userInfo;    }

登录后复制

2、接下来,我要开始试用java写的应用程序下的rest服务了,我通过我传过去的用户ID获取到了用户的所有信息,当然我在项目中使用了缓存技术,还将返回回来的json字符串转换成了json对象,以便我后面好用linq对其进行操作,关于linq to json 可以参考我的linq专题相关文章 ,我在项目中的代码是酱子的:

///     /// 从接口中获取用户所有信息    ///     /// 用户ID    ///     public static JObject CacheUser()    {      try      {        string currentUser = GetCurrentUserId();        if (HttpRuntime.Cache.Get("user$" + GetCurrentUserId()) == null)        {          string endPoint = "http://66.66.66.666:6666/DASBASE/restServices/dataCollectionService/getUserPermissions";          string postData = "jsonData={"userCode": "kfry","systemId": "1E1A7AC94BFC41D4BEBED8942EB69689"}";          var client = new RestClient(endPoint, HttpVerb.POST, postData, "application/x-www-form-urlencoded");          var u = client.MakeRequest();          JObject userInfo = JObject.Parse(u);          //插入缓存          HttpRuntime.Cache.Insert("user$" + currentUser, userInfo, null, System.DateTime.UtcNow.AddMinutes(30), TimeSpan.Zero);        }        return (JObject)HttpRuntime.Cache.Get("user$" + GetCurrentUserId());      }      catch (Exception ex)      {        throw new ApplicationException("获取用户信息出错:"+ex.Message);      }    }

登录后复制

以上就是Rest在asp.net MVC下使用的方法介绍的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2493505.html

(0)
上一篇 2025年3月5日 01:32:44
下一篇 2025年2月28日 12:46:21

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • ASP.NET MVC 使用Bootstrap方法介绍

    本篇文章主要介绍了asp.net mvc 使用bootstrap的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 作为一名Web开发者而言,如果不借助任何前端框架,从零开始使用HTML和CSS来构建友好的页…

    2025年3月5日 编程技术
    200
  • 介绍asp.net MVC下使用rest的方法

    本篇文章主要介绍了asp.net mvc下使用rest的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 前言 最近做了下个MVC的项目,需要用到rest接口,与java写的应用程序通信,包括数据的接收和发送…

    2025年3月5日 编程技术
    200
  • ASP.Net Core中关于WebApi几种版本控制对比详解(图)

    这篇文章主要介绍了浅谈asp.net core webapi几种版本控制对比,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 一、版本控制的好处: (1)有助于及时推出功能, 而不会破坏现有系统。 (2)它还可以…

    2025年3月5日 编程技术
    200
  • Asp.net Core应用程序在Linux上部署的图文详解

    快两个月没接触.net,倒是天天在用linux,所以想尝试一下在linux运行喜欢的.net 应用。 安装CentOS 安装.Net core for Linux 创建Asp.net Core应用程序 安装Nginx 配置Nginx代理 1…

    2025年3月5日 编程技术
    200
  • asp.net下的中文分词检索工具分享

    jieba是python下的一个检索库, 有人将这个库移植到了asp.net 平台下, 完全可以替代lucene.net以及盘古分词的搭配 之所以写这个, 其实是因为昨天面试时, 被问到网站的关键字检索你怎么做?我就是说了下sql模糊查询以…

    2025年3月5日
    200
  • asp.net core封装layui组件的示例详解

    本篇文章主要介绍了详解asp.net core封装layui组件示例分享,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 用什么封装?这里只是用了TagHelper,是啥?自己瞅文档去 在学习使用TagHelpe…

    2025年3月5日
    200
  • ASP.NET样板开发框架ABP系列之ABP入门教程详解

    abp是为新的现代web应用程序使用最佳实践和使用最流行工具的一个起点。可作为一般用途的应用程序的基础框架或项目模板。接下来通过本文给大家详细介绍abp入门教程,感兴趣的朋友一起看看吧 ABP是“ASP.NET Boilerplate Pr…

    2025年3月5日 编程技术
    200
  • asp.net怎么使用js文件

    通常javascript代码可以与html标签一起直接放在前 端页面中,但如果js代码多的话一方面不利于维护,另一方面也对搜索引擎不友好,因为页面因此而变得臃肿。 所以一般有良好开发习惯的程序员都会把 javascript代码放到独立的js…

    2025年3月5日
    200
  • C# GDI+ 实现橡皮筋技术

    应该有很多人都在寻找这方面的资料,看看下面我做的,或许对你会有所帮助,但愿如此。 为了实现橡皮筋技术,我用了两种方法:    第一种是利用ControlPaint.DrawReversibleLine(Point start,Point e…

    编程技术 2025年3月3日
    200
  • 充分发挥异步在 ASP.NET 中的强大优势

    最近几年,异步编程受到极大关注,主要是出于两个关键原因:首先,它有助于提供更好的用户体验,因为不会阻塞 ui 线程,避免了处理结束前出现 ui 界面挂起。其次,它有助于大幅扩展系统,而且无需添加额外硬件。 但是,编写合适的异步代码来管理线程…

    2025年3月3日
    200

发表回复

登录后才能评论