程序后端调用post请求。

   /// <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));

  

  

时间: 2024-10-27 08:20:30

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

小程序云开发调用HTTP请求中got第三方库使用失败解决方法

小程序云开发调用HTTP请求中got第三方库使用失败解决方法 错误代码 {"errorCode":1,"errorMessage":"user code exception caught","stackTrace":"The \"original\" argument must be of type function"} 替换方案 // 云函数入口文件 const cloud = req

怎么在调用异步请求时不阻塞当前线程

在异步编程中,经常会调用已经写好的异步方法.这时会有一个需求:根据异步方法的返回值,做一些别的操作.这时会有两种实现方式: 1. 使用await,阻塞线程,等待异步方法的完成,然后获得返回值,再进行别的操作.示例: static void Main(string[] args) { Console.WriteLine("--------------程序运行开始-----------"); string url = "http://www.baidu.com"; va

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

作者:ffsystem 作为(糟糕的)程序猿,习惯写代码解决一些简单事务.正常用批处理就能解决大部分工作,复杂一点用AutoIt 3. 有时候要分发给别人,就需要一个界面.外行你程序写得如何他看不懂,也不想搞懂.他只看你界面是否花哨,来判断你行不行.没办法只是个看脸的时代,只好给程序整整容. 但是简单的事情,上VS.用.net:或者用java就太无趣了,而且那玩意整好看一点也麻烦. AutoIt3很好用,但界面,但比较传统,找到一个国产的程序,快手AAuto,好像既轻量级.又能html给程序整容

WebApi通过后端调用传递基础类型的参数

WebApi传递实体类型的参数,可以直接将实体序列化,然后写入请求流即可.传递基础类型的参数却不这么方便.以下是自己踩过的坑,分享出来给大家.调用的方式是通过后端,前端的没有总结.WebApi后端代码: public class UsersController : ApiController { private List<Users> _userList = new List<Users>() { new Users{ UserID=1, UserName="冯宝宝&qu

在android程序中调用shell命令与脚本

最近做android的一个功能就是调用shell命令来进行一些系统级别的操作,比如说是关机开机之类的,现在总结一下具体的用法以及遇到的坑(基于我所用到的,没用到的我就不说了) (1) Runtime.getRuntime().exec("ls"); 这是最简单的一种,你输入后就能就会执行ls命令,如果要获得输出的话可以这样写 Process p = Runtime.getRuntime().exec("ls"); String data = null; Buffer

如何在程序中调用Caffe做图像分类

Caffe是目前深度学习比较优秀好用的一个开源库,采样c++和CUDA实现,具有速度快,模型定义方便等优点.学习了几天过后,发现也有一个不方便的地方,就是在我的程序中调用Caffe做图像分类没有直接的接口.Caffe的数据层可以从数据库(支持leveldb.lmdb.hdf5).图片.和内存中读入.我们要在程序中使用,当然得从内存中读入.参见http://caffe.berkeleyvision.org/tutorial/layers.html#data-layers和MemoryDataLay

第一个go的web程序;调用七牛云存储的音频api问题解决;条件搜寻文件里的内容

package main import ( "html/template" "io" "io/ioutil" "log" "net/http" "os" "path" "runtime/debug" ) const ( ListDir      = 0x0001 UPLOAD_DIR   = "./uploads" TEMPLA

Delphi XE7的安卓程序如何调用JAVA的JAR,使用JAVA的类?

本文使用工具和全部源码下载: http://download.csdn.net/detail/sunylat/8190765 为什么我们要在Delphi XE7的安卓程序调用Java的JAR,使用JAVA的类?如果能够这样做,那么就意味着我们把Delphi开发的安卓程序扩展到了一个更大的开发范围了,理论上可以调用任意JAVA编写的代码,对于同时精通Delphi和JAVA的程序员来说,简直如虎添翼!! 我差不多用了一天时间吧,最终在老猫的帮助下,成功实现了在Delphi XE7的安卓程序中调用JA

Native Application 开发详解(直接在程序中调用 ntdll.dll 中的 Native API,有内存小、速度快、安全、API丰富等8大优点)

文章目录:                   1. 引子: 2. Native Application Demo 展示: 3. Native Application 简介: 4. Native Application 有何妙用: 5. MJ0011 关于 Native Application 的文章整理: 6. 互联网上其他关于 Native Application 的文章整理: 7. 小结: 1. 引子: 其实在好久以前就看了 MJ0011 翻译的那个<Native 应用程序详细>系列的文