导出url请求过长,HttpWebRequest改为用RestSharp

 根据请求获取html

1.请求用get,RestClient 用post异步

2.GB2312导出内容乱码用UTF-8

//参数 
Dictionary<string, string> paramDic = new Dictionary<string, string>();
paramDic.Add("Method", paramVm.Method); 
 
byte[] fileByte = HttpHelper.SendRestResponseForByte(api地址 + "/控制器xxx/IndexGet", 
 paramDic, out string fileType, out string fileName);
return File(fileByte, fileType, fileName);

/// <summary>
/// 获取返回流
/// </summary>
/// <param name="url"></param>
/// <param name="parms"></param>
/// <returns></returns>
public static byte[] SendRestRequestPostForByte(string url, Dictionary<string, string> parms, out string fileType, out string fileName)
{
    RestResponse response = CreateRestRequestPostRequest(url, parms, "");
    return GetRestRequestByte(response, out fileType, out fileName);
}

/// <summary>
/// 获取结果
/// </summary>
/// <param name="url">地址</param>
/// <param name="parms">参数</param>
/// <param name="contentType"></param>
/// <returns></returns>
private static RestResponse CreateRestRequestPostRequest(string url, Dictionary<string, string> parms, string contentType)
{
    RestResponse response = null;
    // contentType = "application/x-www-form-urlencoded; charset=gb2312";
    try
    {
        var client = new RestClient(url);
        //client.AddDefaultHeader("Content-Type", contentType);
        var request = new RestRequest();
        foreach (var item in parms)
        {
            if (!string.IsNullOrWhiteSpace(item.Value))
            {
                request.AddParameter(item.Key, item.Value);
            }
        }

        response = GetExportResultAsync(client, request).Result;
    }
    catch (Exception)
    {
        response = null;
    }
    return response;
}

/// <summary>
/// 获取导入异步结果
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <returns></returns>
private static async Task<RestResponse> GetExportResultAsync(RestClient client, RestRequest request)
{
    return await client.ExecutePostAsync(request);
}

/// <summary>
/// 根据RestResponse得到响应的 Html 代码
/// </summary>
/// <param name="request">HttpWebRequest 对象</param>
/// <returns></returns>
public static byte[] GetRestRequestByte(RestResponse response, out string fileType, out string fileName)
{
    
    byte[] arraryByte = null;
    fileType = response.ContentType;
    fileName = "";
    string refleValue = "";
    var header = response.ContentHeaders;
    if (response.ContentHeaders?.Count() > 2)
    {
        int i = 0;
        foreach (var item in response.ContentHeaders)
        {
            if (i == 2)
            {
                Type t = typeof(HeaderParameter);
                PropertyInfo[] propertyInfos = t.GetProperties();
                PropertyInfo keyInfo = propertyInfos.Where(i => i.Name == "Value").First();
                var value = keyInfo.GetValue(item, null);
                refleValue = (string)value;
            }
            i++;
        }
        var nameArr = refleValue.ToString().Split(';');
        string tempName = nameArr[2];
        tempName = tempName.Replace("filename*=UTF-8''", "");
        fileName = HttpUtility.UrlDecode(tempName, Encoding.UTF8).Trim();
    }
    arraryByte = System.Text.Encoding.UTF8.GetBytes(response.Content);
    return arraryByte;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值