C# 应用 - 使用 WepApp 接受 Http 请求
库类:
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 请求:
- http://127.0.0.1:8090/JsonDataForward 触发 ReveiveDataFromBody
- 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 请求的更多相关文章
- C# 应用 - 使用 HttpListener 接受 Http 请求
1. 库类: \Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\System.dll System.Net.HttpListen ...
- Web APi之捕获请求原始内容的实现方法以及接受POST请求多个参数多种解决方案(十四)
前言 我们知道在Web APi中捕获原始请求的内容是肯定是很容易的,但是这句话并不是完全正确,前面我们是不是讨论过,在Web APi中,如果对于字符串发出非Get请求我们则会出错,为何?因为Web A ...
- 限制action所接受的请求方式或请求参数
原文:http://www.cnblogs.com/liukemng/p/3726897.html 2.限制action所接受的请求方式(get或post): 之前我们在HelloWorldContr ...
- Controller 的 Action 只接受 Ajax 请求
ASP.NET MVC 使 Controller 的 Action 只接受 Ajax 请求. 2014-08-27 14:19 by h82258652, 555 阅读, 2 评论, 收藏, 编辑 首 ...
- C# 发送和接受Get请求
1.发送Get请求 public static string HttpGet(string Url, string postDataStr) { HttpWebRequest request = (H ...
- C#发送和接受POST请求
1.发送Post请求代码 /// <summary> /// 发起Http请求 /// </summary> /// <param name="flightDa ...
- Spring MVC 接受的请求参数
目录 1. 概述 2. 详解 2.1 处理查询参数 2.2 处理路径参数接受输入 2.3 处理表单 3. 补充内容 3.1 Ajax/JSON 输入 3.2 multipart参数 3.3 接收 he ...
- 让webapi只接受ajax请求
为了测试先做一个简单的webapi,直接用新建项目时默认的就可以了. 在浏览器中测试request get,得到结果 然后再项目中新建一个AjaxOnly的类 AjaxOnly继承Acti ...
- ASP.NET MVC 使 Controller 的 Action 只接受 Ajax 请求。
首先,ajax 请求跟一般的 web 请求本质是相同的,都是 http 请求.理论上服务器端是无法区分该次请求是不是 ajax 请求的,但是,既然标题都已经说了,那么肯定是有办法做的. 在 ajax ...
随机推荐
- 基于CentOS-7的redis下载和安装
1.下载和安装 在我安装的虚拟机中,我把所有自己安装的软件都放在了/ph/install 目录下,具体以自己实际情况为准. [root@localhost ~]$ cd /ph/install #进入 ...
- C#中word导出功能骚操作
马上过牛年了,先祝大家新年好,身体好,心情好!!! 年前最后写一篇之前项目开发的一个功能,自己根据系统业务,想到的一个解决办法,效率还是不错的,废话不多说,开整!!! 需求:企业填报自己的企业信息到系 ...
- 牛客网多校第7场 J Sudoku Subrectangles 【构造】
题目:戳这里 题意:给一个n*m的矩阵,里面由a~z及A~Z构成,问有多少个子矩阵满足任意一行或一列中都没有相同的字母. 解题思路:左上角和右下角两点可以确定一个矩阵.可以先预处理出来每个点作为一个矩 ...
- hautoj 1268 小天使改名
1268: 小天使改名 时间限制: 2 秒 内存限制: 128 MB提交: 437 解决: 123提交 状态 题目描述 小天使的b站帐号被大家发现啦.于是小天使决定改名,将他原有ID中的两个不同位 ...
- codeforces 9D(非原创)
D. How many trees? time limit per test 1 second memory limit per test 64 megabytes input standard in ...
- 多线程(一)java并发编程基础知识
线程的应用 如何应用多线程 在 Java 中,有多种方式来实现多线程.继承 Thread 类.实现 Runnable 接口.使用 ExecutorService.Callable.Future 实现带 ...
- mimikatz+procdump 提取 Windows 明文密码
0x00 原理 获取到内存文件 lsass.exe 进程 (它用于本地安全和登陆策略) 中存储的明文登录密码. 0x01 操作 Windows10/2012 以下的版本:1.上传 procdump 执 ...
- npm publish bug & solution
npm publish bug & solution npm ERR! Unexpected token < in JSON at position 0 while parsing ne ...
- Electron Security All In One
Electron Security All In One https://www.electronjs.org/docs/tutorial/security CSP Content-Security- ...
- Nuxt.js SSR Optimizing Tips
Nuxt.js SSR Optimizing Tips 性能优化 FP 首次绘制时间 FCP 首次渲染时间 FMP 首屏渲染时间 FI refs https://vueschool.io/articl ...