/// <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 Table ‘xxx’ is marked as crashed and should be repaired的问题。

    解决mysql Table 'xxx' is marked as crashed and should be repaired的问题. 某个表在进行数据插入和更新时突然出现Table 'xxx' is ...

  2. DataTable导出到Excel

    简单的导出到Excel中: 代码如下: using System; using System.Collections.Generic; using System.Data; using System. ...

  3. js 固话正则

    var str = '82386012'; var partten = /(^(0\d{2})-(\d{8})$)|(^(0\d{3})-(\d{7})$)|(^(0\d{2})-(\d{8})-(\ ...

  4. visual studio 2015连接到MySql相关问题

    vs中使用服务器资源管理器连接到MySQL没有成功.按照网上提供的解决方法,相关插件已经安装: 1.控制面板中,MySQL Connector Net 6.9.9已经安装(原安装版本为6.9.8,后升 ...

  5. Redis

    1. sds类型 sds为一种抽象数据结构 typedef char *sds;struct sdshdr { // buf 已占用长度int len; // buf 剩余可用长度int free;  ...

  6. Linux下使用Jmeter做性能测试

    一.安装Jmeter 1.上传Jmeter压缩包到Linux服务器,如:/opt目录下 2.解压缩 unzip apache-jmeter-3.1.zip 3.配置环境变量:vi /etc/profi ...

  7. Mac 下locate命令使用问题WARNING: The locate database (/var/db/locate.database) does not exist.

    想在Mac下使用locate时,提醒数据库没创建: WARNING: The locate database (/var/db/locate.database) does not exist. To ...

  8. 用C#实现 查看exe所加载dll列表的功能

    var p = System.Diagnostics. Process.GetProcessesByName("w3wp").First(); List<System.Dia ...

  9. 组合模式/composite模式/对象结构型模式

    组合模式/composite模式/对象结构型 意图 将对象组合成树形结构以表示"整体--部分"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 动机 C ...

  10. 题目:求1+2+…+n,

    题目:求1+2+-+n, 要求不能使用乘除法.for.while.if.else.switch.case等关键字 以及条件判断语句(A?B:C). java 实现 public class sum { ...