/// <summary>
/// 调用Web API
/// </summary>
public class InvokeMVCWebAPI
{
/// <summary>
/// 如果ErrorCode不是成功直接抛出异常
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="method"></param>
/// <param name="url"></param>
/// <param name="soaLoginRequest"></param>
/// <param name="obj"></param>
/// <returns></returns>
public static SOAResponse<T> InvokeMvcWebApi<T>(
HttpMethod method,
string url,
SOALoginRequest soaLoginRequest = null,
object obj = null, int Timeout_seconds = 600)
{
if (soaLoginRequest == null)
{
soaLoginRequest = new SOALoginRequest
{
UserCookie =
LoginHelper.GetLoginCookieValue,
AppId = UtilVar.AppId,
AppSecrect = UtilVar.AppSecret
};
}
if (string.IsNullOrWhiteSpace(soaLoginRequest.UserCookie))
soaLoginRequest.UserCookie = LoginHelper.GetLoginCookieValue; return HttpWebRequestGetPost<T>(method, url, soaLoginRequest, obj, Timeout_seconds: Timeout_seconds); } //private static object async_object = new object(); /// <summary>
/// 同步方法 超时20分钟
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="method"></param>
/// <param name="url"></param>
/// <param name="soaLoginRequest"></param>
/// <param name="obj"></param>
/// <returns></returns>
public static SOAResponse<T> HttpWebRequestGetPost<T>(HttpMethod method,
string url,
SOALoginRequest soaLoginRequest,
object obj = null, int Timeout_seconds = 600)
{
string jsonObj = "";
if (obj != null)
jsonObj = JSON.SerializeAllField(obj); var returnObj = new SOAResponse<T>
{
Body = default(T)
};
var req = (HttpWebRequest)HttpWebRequest.Create(url);
var encoding = Encoding.UTF8;
req.Accept = "application/json"; req.Headers.Add("X_31HuiYi_LoginCookie", soaLoginRequest.UserCookie);
//string appStr = LoginHelper.SetAppRequest(method, UtilVar.UrlDecode(url), soaLoginRequest);
string appStr = LoginHelper.SetAppRequest(method, url, soaLoginRequest);
req.Headers.Add("X_31HuiYi_AppAuth", appStr);
//设置没有缓存
req.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
req.Timeout = Timeout_seconds * 1000;
string responseData = String.Empty;
req.Method = method.ToString(); req.ContentType = "application/json"; byte[] bs = null;
if (req.Method == "POST" || req.Method == "PUT")
{
if (obj != null)
{
bs = encoding.GetBytes(jsonObj);
req.ContentLength = bs.Length;
}
else
req.ContentLength = 0; using (Stream reqStream = req.GetRequestStream())
{
if (obj != null)
reqStream.Write(bs, 0, bs.Length);
reqStream.Close();
}
} try
{
using (HttpWebResponse response = (HttpWebResponse)req.GetResponse())
{
using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
{
responseData = reader.ReadToEnd().ToString();
returnObj = JSON.Deserialize<SOAResponse<T>>(responseData);
if (response.IsFromCache)
throw new Exception("不能进行缓存--scofi");
Console.WriteLine("成功");
return returnObj;
}
}
}
catch (Exception e)
{
returnObj.Body = default(T); returnObj.Code = ErrorCode.未知错误;
returnObj.AddDefaultMessage("发生未捕捉的异常:" + e.ToString() + " source=" + e.Source + " e.InnerException=" + (e.InnerException == null ? "" : e.InnerException.ToString()));
Console.WriteLine("发生未捕捉的异常:" + e.ToString() + " source=" + e.Source + " e.InnerException=" + (e.InnerException == null ? "" : e.InnerException.ToString())); // string msg = "发生未捕捉的异常:" + e.ToString() + " source=" + e.Source + " e.InnerException=" + (e.InnerException == null ? "" : e.InnerException.ToString()); //if (string.IsNullOrWhiteSpace(e.Message) == false && e.Message.Contains("(404)"))
//{
// LogHelper.Log(LogType.Error, 123, 123, "req.Method= " + req.Method.ToString() + ", url=" + url + " ,msg=" + msg, tags: new List<string>() { "404路由错误" });
//}
//else if (string.IsNullOrWhiteSpace(e.Message) == false && e.Message.Contains("(405)"))
//{
// LogHelper.Log(LogType.Error, 123, 123, "req.Method= " + req.Method.ToString() + ", url=" + url + " ,msg=" + msg, tags: new List<string>() { "405路由method错误" });
//}//远程服务器返回错误: (405) 不允许的方法。 //mongoDB 查询语法:{"Tags":{"$in":["404路由错误","405路由method错误"]}}
return returnObj;
} } /// <summary>
/// 会设置AppAuth
/// </summary>
/// <param name="method"></param>
/// <param name="url"></param>
/// <param name="soaLoginRequest"></param>
/// <param name="content"></param>
/// <returns></returns>
private static HttpRequestMessage GetReqeustMessage(HttpMethod method, string url,
SOALoginRequest soaLoginRequest, JsonHttpContent content = null)
{
var uri = new Uri(url);
var msg = new HttpRequestMessage(method, uri);
if (content != null) msg.Content = content;
msg.Headers.Add("X_31HuiYi_AppAuth", LoginHelper.SetAppRequest(method, url, soaLoginRequest)); return msg;
} }

SOAResponse

using Newtonsoft.Json;
using System;
using System.Collections.Generic; namespace HYService.Util
{
/// <summary>
/// SOA 响应
/// </summary>
/// <typeparam name="T"></typeparam>
[Serializable, JsonObject(MemberSerialization.OptOut)]
public class SOAResponse<T>
{
/// <summary>
///
/// </summary>
public SOAResponse()
{
Code = ErrorCode.成功;
Message = new Dictionary<string, string>();
} /// <summary>
/// 成功,失败通用的一个错误提示信息; 只能添加一次(否则字典抛出异常)
/// </summary>
/// <param name="defaultMessage"></param>
public void AddDefaultMessage(string defaultMessage)
{
if (Message.ContainsKey("defaultMessage") == false)
{
Message.Add("defaultMessage", defaultMessage);
}
else
Message["defaultMessage"] = Message["defaultMessage"] + "; " + defaultMessage; ;
} /// <summary>
/// 获取设置默认值
/// </summary>
/// <returns></returns>
public string DefaultMessage
{
get
{
if (Message.ContainsKey("defaultMessage"))
{
return Message["defaultMessage"];
}
return string.Empty;
} set
{
if (Message.ContainsKey("defaultMessage") == false)
Message.Add("defaultMessage", value);
else
Message["defaultMessage"] = value;
}
} /// <summary>
/// 添加消息
/// </summary>
/// <param name="key"></param>
/// <param name="message"></param>
/// <returns></returns>
public bool AddMessage(string key, string message)
{
if (Message.ContainsKey(key) == false)
{
Message.Add(key, message);
return true;
}
else
{
Message[key] += "," + message;
}
return false;
} /// <summary>
/// 0 表示成功, (默认成功) 负数表示程序抛出异常; 正数表示业务规则不符合要求
/// </summary>
public ErrorCode Code { get; set; } /// <summary>
/// 失败(成功)的描述信息; 添加时候请调用 AddMessage;而不是直接操作字典
/// </summary>
public Dictionary<string, string> Message { get; set; } /// <summary>
/// 生成成功响应
/// </summary>
/// <param name="body"></param>
/// <returns></returns>
public static SOAResponse<T> MakeSucc(T body)
{
return new SOAResponse<T>
{
Code = ErrorCode.成功,
Body = body
};
} /// <summary>
/// 创建失败
/// </summary>
/// <param name="err"></param>
/// <returns></returns>
[Obsolete]
public static SOAResponse<T> MakeFailed(ErrorCode err = ErrorCode.未知错误)
{
return CreateFailed("未知错误", err);
} /// <summary>
/// 设置为失败
/// </summary>
/// <param name="defaultMessage"></param>
/// <param name="errorCode"></param>
public SOAResponse<T> Fail(string defaultMessage = "失败!", ErrorCode errorCode = ErrorCode.未知错误)
{
Code = errorCode;
AddDefaultMessage(defaultMessage);
return this;
} /// <summary>
/// 创建一个失败
/// </summary>
/// <param name="defaultMessage"></param>
/// <param name="errorCode"></param>
/// <returns></returns>
public static SOAResponse<T> CreateFailed(string defaultMessage = "失败!", ErrorCode errorCode = ErrorCode.未知错误)
{
var response = new SOAResponse<T>();
response.Fail(defaultMessage, errorCode);
return response;
} /// <summary>
/// 是否成功
/// </summary>
/// <returns></returns>
public bool IsOk()
{
return this.Code == ErrorCode.成功;
} /// <summary>
/// 返回的对象(主要是让 JSON 序列化 返回的参数在后面)
/// </summary>
public T Body;
} /// <summary>
///
/// </summary>
public enum ErrorCode
{
/// <summary>
/// 程序异常
/// </summary>
程序异常 = -2,
/// <summary>
///
/// </summary>
授权失败 = -1, /// <summary>
/// 成功
/// </summary>
成功 = 0, /// <summary>
///
/// </summary>
未知错误 = 1, }

  直接调用

     if (string.IsNullOrWhiteSpace(info.JsonPOSTData) == false)
{
dynamic d = JSON.Deserialize<dynamic>(info.JsonPOSTData);
result = InvokeMVCWebAPI.InvokeMvcWebApi<bool>(System.Net.Http.HttpMethod.Post, info.PostURL, null, d, timeoutsecond);
}
else
{
result = InvokeMVCWebAPI.InvokeMvcWebApi<bool>(System.Net.Http.HttpMethod.Post, info.PostURL, Timeout_seconds: timeoutsecond);
}
info.ErrorMessages.Add(JSON.SerializeAllField(result));

  

  

程序后端调用post请求。的更多相关文章

  1. 微信小程序 后端用Flask实现

    手上有个微信小程序项目,因为对Python相对熟悉一些,打算后端用python写,具体采用python 轻量级的flask框架. 在做的过程中,有些问题需要考虑,记录在下边. 1. 开发的小程序后端怎 ...

  2. 微信小程序request(ajax)接口请求封装

    微信小程序request(ajax)接口请求封装 最近在进行小程序的编写,需要调用后端接口,经常要用到wx.request方法,所以就自己封装了一下,简化一下代码,如果能给大家提供帮助更好,在封装的时 ...

  3. 微信小程序后端开发流程

    微信小程序后端开发流程根据官网总结为两个步骤 1.前端调用 wx.login 返回了code,然后调用wx.getUserInfo获取到用户的昵称 头像 2.服务端根据code去微信获取openid, ...

  4. Blazor WebAssembly 应用程序中进行 HTTP 请求

    翻译自 Waqas Anwar 2021年5月13日的文章 <Making HTTP Requests in Blazor WebAssembly Apps> [1] 在我的前篇文章< ...

  5. 发布在IIS上的Web程序,调用服务器的COM组件

    场景大致是这样的,在工厂中分布着许多的PDA点,这些PDA点都要进行实时的扫描--打印操作.实现方法是采用网络打印机,然后服务器安装驱动,管理着所有的打印机.然后服务器,发布一个WebService, ...

  6. [快手(AAuto)学习笔记]如何让程序在运行时请求管理员权限(UAC)

    作者:ffsystem 作为(糟糕的)程序猿,习惯写代码解决一些简单事务.正常用批处理就能解决大部分工作,复杂一点用AutoIt 3. 有时候要分发给别人,就需要一个界面.外行你程序写得如何他看不懂, ...

  7. 微信小程序的ajax数据请求wx.request

    微信小程序的ajax数据请求,很多同学找不到api在哪个位置,这里单独把小程序的ajax请求给列出来,微信小程序的请求就是wx.request这个api,wx.request(一些对象参数),微信小程 ...

  8. wpf 错误 执行了 QueryInterface 调用,请求提供 COM 可见的托管类“BoilerMonitoringV1._0.MapControl”的默认 IDispatch 接口。

    在做wpf嵌入地图时,在自定义的WebBrowser 里面使用JavaScript调用外部方法的时报的错误 在原来的WinForm里 我们只要在窗体类设置的头部设置个 [System.Runtime. ...

  9. PHP小程序后端支付代码亲测可用

    小程序后端支付代码亲测可用 <?php namespace Home\Controller; use Think\Controller; class WechatpayController ex ...

随机推荐

  1. ScriptedSandbox64.exe 在写Winform程序Debug时不停提交数据

    抓包时发现不停的在提交数据,导致抓包内容看不到. 取消方式:Tools -> Options -> Debugging -> General -> Enable Diagnos ...

  2. websocket与socket.io

    什么是Websocket? Websocket是一个独立于http的实时通信协议,最初是在HTML5中被引用进来的,在HTML5规范中作为浏览器与服务器的核心通信技术被嵌入到浏览器中.WebSocke ...

  3. Java:方法的参数是传值还是传引用

    Java中方法的参数总是采用传值的方式. 下列方法欲实现对象的交换,但实际上是不能实现的. public void swap(simpleClass a,simpleClass b){ simpleC ...

  4. Position属性四个值:static、fixed、absolute和relative的区别和用法

    Position属性四个值:static.fixed.absolute和relative的区别和用法 在用CSS+DIV进行布局的时候,一直对position的四个属性值relative,absolu ...

  5. MySql触发器语法总结

    经过昨天多次失败,今天终于将我要实现的触发器功能写成功了,触发器代码如下: -- use dbfortest; drop trigger if exists tg_before_insert_on_d ...

  6. SimpleXML操控XML

    复杂字符串如下: $_xml=<<<_xml <?xml version="1.0" encoding="utf-8"?> < ...

  7. mysql提供dataprovider

    import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.Inpu ...

  8. Unity Animation System(动画系统)

    动画系统: 支持:动画融合,混合,叠加动画,行走循环的时间同步,动画层,控制动画的各个方面(时间,速度,融合权重)   带有每顶点1.2或4骨骼的蒙皮网格,以及支持基于物理的布娃娃系统和程序动画.   ...

  9. vim简明教程

    在shell中新建一个文件 # vim a.txt vim有三种模式:一般模式.插入模式.底行模式 三种工作模式 1.命令模式 移动光标 hjkl yy 复制 nyy 从光标向下复制n行 0 移动光标 ...

  10. Linux学习笔记(8)-exec族函数

    昨天学习了Linux下的进程创建,创建一个进程的方法极为简单,只需要调用fork函数就可以创建出一个进程,但是-- 介绍fork()函数的时候提到,在创建进程后,子进程与父进程有相同的代码空间,执行的 ...