/// <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. 高性能MySQL(四):schema陷阱

    一.schema陷阱 二.缓存表和汇总表 三.范式和反范式

  2. 在WPF中使用变通方法实现枚举类型的XAML绑定

    问题缘起 WPF的分层结构为编程带来了极大便利,XAML绑定是其最主要的特征.在使用绑定的过程中,大家都普遍的发现枚举成员的绑定是个问题.一般来说,枚举绑定多出现于与ComboBox配合的情况,此时我 ...

  3. ffmpeg-20161003[04,05.06]-bin.7z

    ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 5 屏幕横向放大 20 像素 6 屏幕横向缩小 20 像素 S 下一帧 [ -2秒 ] +2 ...

  4. sql server 2008 R2配置管理

    安装vs2013后,sql server 2008R2配置管理提示“远程过程调用失败” 这是因为vs2013自带的Microsoft SQL Server 2012Local DB与之冲突. 通过升级 ...

  5. codeforces 484D Kindergarten (dp、贪心)

    题意:给n个数,分成若干个连续组,每组获益为max-min,输出最大获益. 参考:http://blog.csdn.net/keshuai19940722/article/details/408735 ...

  6. VC++/MFC 最常用宏和指令

    1.#include指令  包含指定的文件,最基本的最熟悉的指令,编程中不得不用,包含库文件用双尖括号,包含自定义头文件用双引号. 2.#define指令   预定义,通常用它来定义常量(包括无参量与 ...

  7. iOS企业分发证书制作

    自签名证书制作流程 打开终端,输入 openssl genrsa - ,生成名称为ca的秘钥 注:openssl生成的文件皆放在用户文档下(finder菜单栏'前往' - 电脑 -Macintosh ...

  8. React学习笔记-8-属性和状态详解

    属性的含义和用法props=properties 英文中属性的意思.属性不可以修改,也就是属性不可以由组件进行修改,组件的属性是由父组件传递过来的,相当于组件在出生的时候带的.用法第一种:直接在调用组 ...

  9. OutofMemory之PermGen介绍

    可参考:https://my.oschina.net/benhaile/blog/214159.

  10. CentOS 7 (RHEL 7)服务管理命令的变化

    CentOS 7 (RHEL 7)带来了新的服务管理命令,为了保持兼容原有的命令仍可以使用,以下是新旧命令的对照. 启动.停止.重启.重载.检查服务:6: service httpd start|st ...