首页 > 网站 > 建站经验 > 正文

AS_P.NET Web API实现POST报文的构造与推送

2019-11-02 15:09:55
字体:
来源:转载
供稿:网友

   毕设和OAuth协议相关,而要理解OAuth协议就必须理解HTTP GET/POST方法。因此研究了一下如何使用Web API或MVC构造POST报文并实现客户端与服务器端的交互。

  我使用的工具是Visual Studio 2013 + Web API 2 + MVC 5。

  在两个不同的VS2013实例中分别新建两个Web项目,都选择空模板,其中一个命名为Client,采用MVC架构,另一个命名为Server,采用Web API架构。

  这里需要两个不同的VS2013实例是为了能使两个IIS Express服务在同一台机器上同时运

小清新网名[www.la240.com/html2017/1/34/]
行。

  我们先来看看客户端:

  由于只是个Demo,因此我们只在客户端中新建一个空的MVC控制器,将其命名为HomeController。它会自带一个Index()方法。我们在这里面写好构造请求并发送请求的代码:

  复制代码

  namespace Client.Controllers

  {

  public class HomeController : Controller

  {

  //

  // GET: /Home/

  public ActionResult Index()

  {

  string url = ""; // 这里我们还不知道服务器的url,因此留空

  #region 构造POST请求

  HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;

  request.Method = "POST";

  request.ContentType = "application/x-www-form-urlencoded";

  request.Host = "localhost:14340";

  string body = "client_id=123&redirect_uri="+url+"&response_type=code";

  byte[] bodyBytes = Encoding.UTF8.GetBytes(body);

  Stream requestStream = request.GetRequestStream();

  requestStream.Write(bodyBytes,0,bodyBytes.Length);

  #endregion

  #region 发送请求并取得响应

  // 必须使用HttpWebRequest.GetResponse()方法,请求才能被发送并取得响应

  HttpWebResponse response = request.GetResponse() as HttpWebResponse;

  StreamReader sr = new StreamReader(response.GetResponseStream());

  ViewBag.Response = sr.ReadToEnd();

  #endregion

  return View();

  }

  }

  }

  复制代码

  接下来我们构造服务器端:

  在Server项目中,新建一个Web API 2控制器。命名随意(我这里命名为ApiTestController),在控制器中写入一个方法Post,返回HttpResponseMessage类型。

  本来我一直以为POST的参数可以在Request属性中获取,但是仔细检查了Request属性的所有属性和方法,包括扩展方法,都没有找到可以直接读取POST报文请求体的属性或方法。查阅资料得知,如果要在POST请求中获取请求体的内容,就必须将参数封装在一个类中。于是我们建立一个类RequestArgs如下:

  复制代码

  namespace Server.Models

  {

  ///

 

  /// 对于POST请求,必须对请求体的所有参数建立一个模型类。

  ///

 

  public class RequestArgs

  {

  public string client_id { get; set; }

  public string redirect_uri { get; set; }

  public string response_type { get; set; }

  }

  }

  复制代码

  这里的参数和上文客户端Action方法中的请求报文内容必须保持名称一致(包括大小写)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表