它与OAuth协议有关,
要了解OAuth协议,您必须了解HTTP GET/POST方法。因此,考虑如何使用 Web API 或 MVC 构造 POST 消息并实现客户端-服务器交互。
我使用的工具是 2013 + Web API 2 + MVC 5。
在两个不同的实例中创建两个新的 Web 项目,这两个实例都使用空模板,一个名为 MVC 体系结构,另一个名为 Web API 体系结构。
此处需要两个不同的实例才能使两个 IIS 服务在同一台计算机上同时运行。
我们先来看看客户端:
由于它只是一个演示,我们只需在客户端中创建一个空的 MVC 控制器并命名它。它带有一个 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(); } } }
接下来我们构造服务器端:
在项目中,创建新的 Web API 2 控制器。任意命名(我在这里命名),在控制器中写一个方法Post,返回类型。
最初,我一直认为 POST 的参数可以在属性
中获取,但是在仔细检查了属性的所有属性和方法(包括扩展方法)后,我没有找到任何可以直接读取 POST 消息的请求正文的属性或方法。抬头看来,如果要在 POST 请求中获取请求正文的内容,则必须将参数封装在类中。所以我们构建一个类,如下所示:
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; } } }此处的参数和上述客户端方法中的请求数据包内容必须与名称一致(包括大小写)。
之后,我们编写控制器的 POST 方法如下:
namespace Server.Controllers { public class ApiTestController : ApiController { public HttpResponseMessage Post(RequestArgs args) { string client_id = args.client_id; string redirect_uri = args.redirect_uri; string response_type = args.response_type; return Request.CreateResponse(HttpStatusCode.OK, “I have received your message. Client_id = “+client_id+”, RedirectUri = “+redirect_uri+”response_type = “+response_type); } } }在这里,我们
直接返回消息的内容,在实际项目中,我们可以自己处理传递的参数。
[英文]
在这里,我们 的 ,在 中,我们可以 .
之后我们编译并运行服务器端(最好按 F5 进入调试模式)。您可以看到出现的网页似乎是一个错误页面,但不要管它服务器推送技术,我们的服务器已经在运行。
记下服务器的地址(通常端口号会变),并在客户端中填写服务器的 URL 变量。
编译并运行客户端,如果出现返回的消息(此处为“我有你的”和参数信息),则表示我们的请求成功。
附加说明:如果在 中。如果在 () 方法中传入实体对象,默认是将其转换为 JSON 传递,当然,您可以修改.cs中返回结果的方式。
本文的目的是研究未来的延续,并记录MVC和Web API的研究。
请纠正我!
:
: 明日香
标题:ASP.NET Web API 实现了 POST 数据包的构建和推送