库类:

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. 什么样的 SQL 不走索引

    参考: MySQL 索引优化全攻略 索引建立的规则 1.能创建唯一索引就创建唯一索引 2.为经常需要排序.分组和联合操作的字段建立索引 3.为常作为查询条件的字段建立索引 如果某个字段经常用来做查询条 ...

  2. C - dlopen dlsym

    -----------------------------------------------------------------------------dlsym------------------ ...

  3. VS中使用TreeView的Checked属性问题

    VS中使用TreeView,当需要用到Checked属性,并需要同步子节点和父节点的Checked属性时,若使用AfterCheck事件会导致死循环,这里我使用的是NodeMouseClick事件.代 ...

  4. IFIX 5.9 报警存sql

    环境 win7x64 + ifix 5.9 + sql server 2008 (sql 我装在了别的win10的机器上,和ifix的win7不在同一个机器,网是通的) 1 安装sql server ...

  5. HDU 3920 Clear All of Them I(状压DP)题解

    题意:2n个点,一个起点,开n枪,每枪必须打两个点,花费为起点到其中一点距离加上两点距离.问打完2n个点的最小花费. 思路:很显然应该dp状态,然后枚举i j两个空位置去填,那么复杂度$O(20 * ...

  6. C++中函数的形式参数引用

    形式参数的传递方式 值传递 值传递是将数值传递到程序中,这种方式传递是单向传递 但是如果想要双向传递,这种视频无法满足: 引用传递 引用传递可以实现双向的传递 为了对比处两个之间的差异,这里举出两个例 ...

  7. tensorflow加载ckpt出错

    Issue链接 问题: tensorflow加载ckpt出错 此处原因: 该ckpt文件对应的tensorflow版本过老, 其中的部分内置变量名发生了改变. 提示: Key lstm_o/bidir ...

  8. 如何将多个 Apple 设备中保存在 iCloud 里面密码同步

    如何将多个 Apple 设备中保存在 iCloud 里面密码同步 iCloud 钥匙串 密码同步 数据迁移 iOS iCloud 钥匙串会记住一些信息,因此您就无需记忆这些信息. 它会在您批准的任何设 ...

  9. YouTube 视频下载工具

    YouTube 视频下载工具 我不生产视频,只是优秀视频的搬运工! YouTube-dl https://github.com/search?q=youtube-dl https://github.c ...

  10. CSS & new class name

    CSS & new class name { test: /\.((s*)css|sass)$/, // test: /\.(css|scss|sass)$/, use: ExtractTex ...