/// <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. window 安装grunt

    1.先安装nodejs ,npm ,参考 http://www.cnblogs.com/seanlv/archive/2011/11/22/2258716.html 2 安装grunt 百度搜索 参考 ...

  2. [Sass]混合宏

    [Sass]混合宏-声明混合宏 如果整个网站中有几处小样式类似,比如颜色,字体等,在 Sass 可以使用变量来统一处理,那么这种选择还是不错的.但当你的样式变得越来越复杂,需要重复使用大段的样式时,使 ...

  3. 377. Combination Sum IV

    问题 Given an integer array with all positive numbers and no duplicates, find the number of possible c ...

  4. iOS 之UIButton左文右图

    对于button,当添加了图片时,默认是左图右文的 '[self.pageViewsLB setImage:[UIImage imageNamed:@"read"] forStat ...

  5. php 导出excle的.csv格式的数据时乱码问题

    1.header('Content-Encoding: XXXX'); 有可能是编码问题:可以尝试UTF-8,GBK,GB2312,等编码格式 2.有可能是文件编码问题,虽然UTF-8不建议带BOM, ...

  6. ModPagespeed for Apache安装配置

    1.安装ModPagespeed #32位wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_i38 ...

  7. iOS 字符串删除 DOM

    iOS  string 删除 包含的 DOM NSMutableString *mutableString = [NSMutableString stringWithString:responseSt ...

  8. 【用xocde5打包 在IOS7以下也能显示无默认gloss 效果 图解】

    图解,只需要这几个地方修改以下就好了,看不懂的话,请留言 完毕:记着clean 以下项目文件

  9. 手把手教你玩转nginx负载均衡(二)----安装虚拟机操作系统

    引言 在上一篇,我们组装好了虚拟机的硬件部分,那么现在我们就要把操作系统装上了,既然是服务器,那么安装linux操作系统是个比较好的选择,如果你喜欢的话,安装windows也是没有任何问题的 我这里选 ...

  10. 在eclipse安装svn插件

    1.在“帮助--安装新软件”中选中.我这个是中文版的,英文版的是“install new software”