ABP框架中微服務跨域調用其它服務接口


AjaxResponse為ABP自動包裝的JSON格式
    /// <summary>
    /// 通過地址和參數取得返回OutPut數據
    /// </summary>
    /// <param name="url"></param>
    /// <param name="input">請求參數</param>
    /// <returns></returns>
    public static OutPut ResultGet(string url, object input = null)
    {
        var data = Get(url, input);
        var response = data.JsonToObject<AjaxResponse>();

        if (response.Success == false)
        {
            var str = data.JsonToObject<AjaxResponse>();
            throw new Exception(str.Error.Message);
        }
        return response.Result.ToString().JsonToObject<OutPut>();
    }

    /// <summary>
    /// 通過地址和參數取得返回OutPut數據
    /// </summary>
    /// <param name="url"></param>
    /// <param name="input">請求參數</param>
    /// <returns></returns>
    public static OutPut ResultPost(string url, object input = null)
    {
        var data = Post(url, input);
        var response = data.JsonToObject<AjaxResponse>();

        if (response.Success == false)
        {
            var str = data.JsonToObject<AjaxResponse>();
            throw new Exception(str.Error.Message);
        }
        return response.Result.ToString().JsonToObject<OutPut>();
    }

    /// <summary>
    ///通過地址和我反序列后的JSON取得返回GeneralOutPut數據
    /// </summary>
    /// <param name="url">請求地址</param>
    /// <param name="input">請求參數</param> 
    /// <returns>請求返回的結果</returns>
    private static string Get(string url, object input = null)
    {
        var properties = input?.GetType().GetProperties();
        var parm = string.Empty;
        foreach (var propertie in properties)
        {
            var name = propertie.Name;
            var value = input.GetType().GetProperty(name).GetValue(input);//直接根據屬性的名字獲取其值  

            parm += $"&{ name}={value}";
        }

        parm = parm.Trim('&');
        url = $"{url}?{parm}";

        // Prepare web request...  
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Method = "GET";
        request.ContentType = "application/json";

        return HttpRequest(request);
    }

    /// <summary>  
    /// 指定Post地址使用Get 方式獲取全部字符串  
    /// </summary>  
    /// <param name="url">請求后台地址</param>  
    /// <returns></returns>  
    public static string Post(string url, object input)
    {
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";

        #region 添加Post 參數  
        var parm = Serialization.JsonSerialize(input);
        byte[] data = Encoding.UTF8.GetBytes(parm);
        req.ContentLength = data.Length;
        using (Stream reqStream = req.GetRequestStream())
        {
            reqStream.Write(data, 0, data.Length);
            reqStream.Close();
        }
        #endregion

        return HttpRequest(req);
    }

    /// <summary>
    /// 請求的主體部分(由此完成請求並返回請求結果)
    /// </summary>
    /// <param name="request">請求的對象</param> 
    /// <returns>請求返回結果</returns>
    private static string HttpRequest(HttpWebRequest request)
    {
        HttpWebResponse response = null;

        try
        {
            response = (HttpWebResponse)request.GetResponse();
        }
        catch (WebException ex)
        {
            response = (HttpWebResponse)ex.Response;
        }

        string result = string.Empty;
        using (StreamReader reader = new StreamReader(response.GetResponseStream()))
        {
            result = reader.ReadToEnd();
        }

        return result;
    }

    /// <summary>
    /// URL拼寫完整性檢查
    /// </summary>
    /// <param name="url">待檢查的URL</param>
    private static string UrlCheck(string url)
    {
        if (!url.StartsWith("http://") && !url.StartsWith("https://"))
            url = "http://" + url;

        return url;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM