库类:

Owin.dll
Owin.IAppBuilder Microsoft.Owin.dll
Microsoft.Owin.OwinContext Microsoft.Owin.Hosting.dll
Microsoft.Owin.Hosting.WebApp Microsoft.Owin.Host.HttpListener.dll \Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\System.Net.Http.dll
System.Net.Http.HttpResponseMessage System.Web.Http.dll
System.Web.Http.ApiController、System.Web.Http.HttpConfiguration System.Web.Http.Owin.dll
System.Net.Http.Formatting.dll Newtonsoft.Json.dll

1. 代码

1.1 启动

using System;
using System.Web.Http;
using Microsoft.Owin.Hosting;
using Owin; class HttpServer
{
static void Main(string[] args)
{
string baseAddress = "http://127.0.0.1:8090"; WebApp.Start<StartUp>(url: baseAddress); Console.WriteLine("开始监听", baseAddress);
Console.ReadKey();
}
} internal class StartUp
{
public void Configuration(IAppBuilder appBuilder)
{
var config = new HttpConfiguration(); // 允许特性路由
config.MapHttpAttributeRoutes(); //按控制器controller名称的路由
var controlroute = config.Routes.MapHttpRoute(
name: "ControllerApi",
routeTemplate: "{controller}"
); // web api 接口
appBuilder.UseWebApi(config);
}
}

1.2 控制器基类

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using Newtonsoft.Json; public class BaseApiController : ApiController
{
/// <summary>
/// 创建一个json格式的返回信息,一般用于返回值类型是string(直接返回string如果123,会变成"123"),如果是其它对象类型,直接返回即可,程序会自动转成json
/// </summary>
/// <param name="obj">返回信息,如果是字符串,则不进行转换</param>
/// <param name="encode">返回是的编码</param>
/// <param name="setting">转换为json时所用的设置</param>
/// <returns></returns>
[NonAction()]
public HttpResponseMessage CreateJsonResponse(object obj, Encoding encode = null, JsonSerializerSettings setting = null)
{
// 返回的HttpResponseMessage
string str;
HttpStatusCode statusCode;
HttpResponseMessage result;
try
{
if (obj == null)
{
str = null;
statusCode = HttpStatusCode.NoContent;
}
else if (obj is string || obj is char)
{
str = obj.ToString();
statusCode = HttpStatusCode.OK;
}
else
{
if (setting == null) setting = new JsonSerializerSettings { NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, DateFormatString = "yyyy-MM-dd HH:mm:ss" };
str = JsonConvert.SerializeObject(obj, setting);
statusCode = HttpStatusCode.OK;
}
result = new HttpResponseMessage { StatusCode = statusCode, Content = new StringContent(str, encode == null ? Encoding.UTF8 : encode, "application/json") };
}
catch (Exception ex)
{
result = new HttpResponseMessage { StatusCode = System.Net.HttpStatusCode.InternalServerError, Content = new StringContent(ex.ToString(), encode == null ? Encoding.UTF8 : encode) };
}
return result;
}
}

1.3 业务控制器

/// <summary>
/// Json数据转发控制器
/// </summary>
public class JsonDataForwardController : BaseApiController
{
#region 接收数据,1.通过put或get并把数据作为参数附在url推送过来,2.通过post并将数据附在body上传送过来。推荐用第2种方法 /// <summary>
/// 通过url参数获取接收数据
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
[HttpGet]
[HttpPut]
public HttpResponseMessage ReveiveDataFromUrl(string data)
{
return CreateJsonResponse(ReveiveData(data));
} /// <summary>
/// 在body中获取接收数据
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
[HttpPost]
public HttpResponseMessage ReveiveDataFromBody([FromBody] object data)
{
return CreateJsonResponse(ReveiveData(data.ToString()));
}
#endregion #region 普通请求
[HttpPost]
[Route("JsonDataForward/Extend")]
public HttpResponseMessage ExtendRequest([FromBody] object body)
{
return new HttpResponseMessage();
}
#endregion #region 非http请求方法
/// <summary>
/// 处理推送过来的数据
/// </summary>
/// <param name="data">推送过来的数据</param>
/// <returns></returns>
[NonAction()]
public string ReveiveData(string data)
{
return string.Empty;
}
}

Post 请求:

  1. http://127.0.0.1:8090/JsonDataForward 触发 ReveiveDataFromBody
  2. http://127.0.0.1:8090/JsonDataForward/Extend 触发 ExtendRequest

3. Http 系列

3.1 发起请求

使用 HttpWebRequest 发起 Http 请求:https://www.cnblogs.com/MichaelLoveSna/p/14501036.html

使用 WebClient 发起 Http 请求 :https://www.cnblogs.com/MichaelLoveSna/p/14501582.html

使用 HttpClient 发起 Http 请求:https://www.cnblogs.com/MichaelLoveSna/p/14501592.html

使用 HttpClient 发起上传文件、下载文件请求:https://www.cnblogs.com/MichaelLoveSna/p/14501603.html

3.2 接受请求

使用 HttpListener 接受 Http 请求:https://www.cnblogs.com/MichaelLoveSna/p/14501628.html

使用 WepApp 接受 Http 请求:https://www.cnblogs.com/MichaelLoveSna/p/14501612.html

使用 WepApp 处理文件上传、下载请求:https://www.cnblogs.com/MichaelLoveSna/p/14501616.html

C# 应用 - 使用 WepApp 接受 Http 请求的更多相关文章

  1. C# 应用 - 使用 HttpListener 接受 Http 请求

    1. 库类: \Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\System.dll System.Net.HttpListen ...

  2. Web APi之捕获请求原始内容的实现方法以及接受POST请求多个参数多种解决方案(十四)

    前言 我们知道在Web APi中捕获原始请求的内容是肯定是很容易的,但是这句话并不是完全正确,前面我们是不是讨论过,在Web APi中,如果对于字符串发出非Get请求我们则会出错,为何?因为Web A ...

  3. 限制action所接受的请求方式或请求参数

    原文:http://www.cnblogs.com/liukemng/p/3726897.html 2.限制action所接受的请求方式(get或post): 之前我们在HelloWorldContr ...

  4. Controller 的 Action 只接受 Ajax 请求

    ASP.NET MVC 使 Controller 的 Action 只接受 Ajax 请求. 2014-08-27 14:19 by h82258652, 555 阅读, 2 评论, 收藏, 编辑 首 ...

  5. C# 发送和接受Get请求

    1.发送Get请求 public static string HttpGet(string Url, string postDataStr) { HttpWebRequest request = (H ...

  6. C#发送和接受POST请求

    1.发送Post请求代码 /// <summary> /// 发起Http请求 /// </summary> /// <param name="flightDa ...

  7. Spring MVC 接受的请求参数

    目录 1. 概述 2. 详解 2.1 处理查询参数 2.2 处理路径参数接受输入 2.3 处理表单 3. 补充内容 3.1 Ajax/JSON 输入 3.2 multipart参数 3.3 接收 he ...

  8. 让webapi只接受ajax请求

    为了测试先做一个简单的webapi,直接用新建项目时默认的就可以了.   在浏览器中测试request get,得到结果   然后再项目中新建一个AjaxOnly的类   AjaxOnly继承Acti ...

  9. ASP.NET MVC 使 Controller 的 Action 只接受 Ajax 请求。

    首先,ajax 请求跟一般的 web 请求本质是相同的,都是 http 请求.理论上服务器端是无法区分该次请求是不是 ajax 请求的,但是,既然标题都已经说了,那么肯定是有办法做的. 在 ajax ...

随机推荐

  1. OpenStack Train版-12.创建虚拟网络并启动实例(控制节点)

    使用VMware虚拟机创建网络可能会有不可预测到的故障,可以通过dashboard界面,管理员创建admin用户的网络环境 1.第一种: 建立公共提供商网络在admin管理员用户下创建 source ...

  2. TCP 连接

    面试题传送 TCP 报文格式 此处介绍建立或者断开TCP连接时,需要了解的TCP报文段首部字段含义: 序列号 seq:占4个字节(32位),用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上 ...

  3. codeforces 1010 C. Border【exgcd】

    题目链接:戳这里 学习博客:戳这里 题意:给n种数,n种数取任意个任意组合相加为sum,求sum%k有哪些值. 解题思路: 由exgcd可知(具体用到的是贝祖定理),ax + by = c,满足gcd ...

  4. 008.NET5_IIS安装教程

    控制面板->程序->启动或关闭Windows功能

  5. 手把手搭建一套私有 npm 服务

    手把手搭建一套私有 npm 服务 gnpm xnpm pnpm lnpm refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  6. Microsoft Lifecycle Policy

    Microsoft Lifecycle Policy The Microsoft Lifecycle Policy gives you consistent and predictable guide ...

  7. React Hooks +React Context vs Redux

    React Hooks +React Context vs Redux https://blog.logrocket.com/use-hooks-and-context-not-react-and-r ...

  8. js navigator.wakeLock 保持屏幕唤醒状态

    let lock; btn.addEventListener("click", async () => { try { if (lock) { lock.release(); ...

  9. layui 时间插件laydate中动态设置改变min和max值

    <div class="layui-inline"> <label class="layui-form-label">申请时间</ ...

  10. NGK底层技术如何助力SPC子币VAST高价与安全并行?

    NGK近来使用了新的侧链技术推出了新的SPC侧链代币,以及SPC的子币VAST---维萨币. NGK使用去中心化和开源区块链数据分布式协议,不断打造高倍币,力求成为生态建设参与者们所信赖的高倍币孵化器 ...