http下载文件,不保存到服务器,直接使用浏览器下载

/// <summary>
/// 根据url下载文件
/// </summary>
/// <param name="url">文件url</param>
/// <param name="fileName">文件名</param>
public void GetFileFromNetUrl(string url, string fileName)
{
Stream stream = null;
int bytesToRead = ;
byte[] buffer = new Byte[bytesToRead];
try
{
HttpWebRequest fileReq = (HttpWebRequest)HttpWebRequest.Create(url);
HttpWebResponse fileResp = (HttpWebResponse)fileReq.GetResponse();
if (fileReq.ContentLength > )
fileResp.ContentLength = fileReq.ContentLength;
stream = fileResp.GetResponseStream();
var resp = Response;
resp.ContentType = "application/octet-stream";
//设置文件名
resp.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
resp.AddHeader("Content-Length", fileResp.ContentLength.ToString());
int length;
do
{
if (resp.IsClientConnected)
{
length = stream.Read(buffer, , bytesToRead);
resp.OutputStream.Write(buffer, , length);
resp.Flush();
buffer = new Byte[bytesToRead];
}
else
{
length = -;
}
} while (length > );
}
finally
{
if (stream != null)
{
stream.Close();
}
}
}

获取网络图片并转换为base64

 private string GetImgBase64(string imgUrl)
{
WebRequest request = WebRequest.Create(imgUrl);
WebResponse response = request.GetResponse();
Stream s = response.GetResponseStream();
byte[] data = new byte[];
int length = ;
MemoryStream ms = new MemoryStream();
while ((length = s.Read(data, , data.Length)) > )
{
ms.Write(data, , length);
}
ms.Seek(, SeekOrigin.Begin);
return Convert.ToBase64String(ms.ToArray());
}

判断请求来源

public ActionResult DownloadApp()
{
//获取客服端请求源
string agent = Request.UserAgent;
string[] keywords = { "Android", "iPhone", "iPod", "iPad", "Windows Phone", "MQQBrowser" };
// CloudWave.Framework.Core.Logging.Logging4net.WriteInfo(agent);
//排除 Windows 桌面系统
//if (!agent.Contains("Windows NT") || (agent.Contains("Windows NT") && agent.Contains("compatible; MSIE 9.0;")))
var downloadurl = "";
//判断是微信, 直接响应应用宝地址
if (agent.ToLower().Contains("micromessenger"))
{
//获取配置信息
}
//安卓
else if (agent.ToLower().Contains(keywords[]))
{ }
//苹果
else if(agent.ToLower().Contains(keywords[].ToLower())|| agent.ToLower().Contains(keywords[].ToLower())
|| agent.ToLower().Contains(keywords[].ToLower()))
{ }
return Json(downloadurl);
}

js encodeURI编码 后面解码

 var str1 = HttpUtility.UrlDecode(Keyword);
var str2 = Server.HtmlDecode(Keyword);
var str3 = Server.UrlDecode(Keyword);
var str4 = Microsoft.JScript.GlobalObject.decodeURIComponent(Keyword);

参数渲染扩展类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace System { /// <summary>
/// 参数渲染扩展类
/// </summary>
public static class LayoutRenderer { /// <summary>
/// 格式化模板参数替换参数项为对应的值的字符串表示
/// str:模板字符串(例:"Hello {Text}")
/// </summary>
/// <param name="str">模板字符串(例:"Hello {Text}")</param>
/// <param name="jsonValue">对应模板的参数值,json格式(例:"{\"Text\":\"World\"}")</param>
/// <returns></returns>
public static string FormatTemplate(this string str, string jsonValue) {
var jObject = Newtonsoft.Json.JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(jsonValue); // (Newtonsoft.Json.Linq.JObject)req.Data;
if (jObject != null) {
string name = "", value = "";
foreach (var item in jObject) {
if (item.Value is Newtonsoft.Json.Linq.JValue) {
name = item.Key;
value = System.Web.HttpUtility.UrlDecode(item.Value.ToString());
}
str = str.Replace(string.Format("{0}{1}{2}", "{", name, "}"), value);
}
}
return str;
} /// <summary>
/// 格式化模板参数替换参数项为对应的值的字符串表示
/// str:模板字符串(例:"Hello {Text}")
/// </summary>
/// <param name="str">模板字符串(例:"Hello {Text}")</param>
/// <param name="objValue">对应模板的参数值对象实例</param>
/// <returns></returns>
public static string FormatTemplate<T>(this string str, T objValue) where T : new() {
if (objValue != null) {
var type = objValue.GetType();
var properties = type.GetProperties();
foreach (var item in properties) {
// item.GetValue();
var value = item.GetValue(objValue);
if (value != null)
str = str.Replace(string.Format("{0}{1}{2}", "{", item.Name, "}"), value.ToString());
}
}
return str;
} /// <summary>
/// 将传入的字符串中间部分字符替换成特殊字符
/// </summary>
/// <param name="value">需要替换的字符串</param>
/// <param name="startLen">前保留长度</param>
/// <param name="endLen">尾保留长度</param>
/// <param name="replaceChar">特殊字符</param>
/// <returns>被特殊字符替换的字符串</returns>
public static string ReplaceWithSpecialChar(string value, int startLen = , int endLen = , char specialChar = '*')
{
try
{
int lenth = value.Length - startLen - endLen; string replaceStr = value.Substring(startLen, lenth); string specialStr = string.Empty; for (int i = ; i < replaceStr.Length; i++)
{
specialStr += specialChar;
} value = value.Replace(replaceStr, specialStr);
}
catch (Exception)
{
return value;
} return value;
}
}
}

c# 的一些基本操作或属性的更多相关文章

  1. 【日常操作记录】Asp.Net Core 的一些基本操作或属性

    用于记录在项目中使用到的方法.属性.操作,持续更新中 静态文件的使用 在项目中静态文件的使用需要在Startup中的Configure方法中增加: //使用静态文件 app.UseStaticFile ...

  2. 【操作记录】Asp.Net Core 的一些基本操作或属性

    用于记录在项目中使用到的方法.属性.操作,持续更新中 .net core 开源地址 图片上传: public async Task<IActionResult> Upload([FromS ...

  3. 深入理解javascript对象系列第二篇——属性操作

    × 目录 [1]查询 [2]设置 [3]删除[4]继承 前面的话 对于对象来说,属性操作是绕不开的话题.类似于“增删改查”的基本操作,属性操作分为属性查询.属性设置.属性删除,还包括属性继承.本文是对 ...

  4. JavaScript笔记01_基本操作

    目录 1. JS代码编写的位置 2. 为什么JavaScript中代码要以分号结束 3. 字面量和变量 4. 数据类型 5. 类型装换 6. ++a和a++ 7. 逻辑运算符 8. 相等运算符 9. ...

  5. Java 集合系列01之 总体框架

      Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.*Java集合主要可以划分为4个部分:List列表.Set ...

  6. Java集合系列:-----------01集合的整体框架

    内容来自:http://www.cnblogs.com/skywang12345/p/3308498.html Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映 ...

  7. 用pywinauto进行win32应用程序的测试

    之前做win32应用测试时,用过很多大家耳熟成详的工具,接触pywinauto之前,对它的了解也不多,然而,随着对它了解的增多,发现它借助了python动态对象的能力,使得代码即便于书定,也便于阅读, ...

  8. Java 集合系列 01 总体框架

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  9. 《Genesis-3D开源游戏引擎-官方录制系列视频教程:基础操作篇》

    注:本系列教程仅针对引擎编辑器:v1.2.2及以下版本 G3D基础操作   第一课<G3D编辑器初探> G3D编辑器介绍,依托于一个复杂场景,讲解了场景视图及其基本操作,属性面板和工具栏的 ...

随机推荐

  1. nginx使用“sudo service nginx start”启动报错解决方案

    下载nginx的启动脚本: # wget -O init-deb.sh http://library.linode.com/assets/660-init-deb.sh 将脚本添加到init.d目录和 ...

  2. vue 实战语法错误导致的问题记录

    1. 在组件中引入mapActions import mapActions  from 'vuex'   而不是  getActions 2.引入 mutations-type.js import   ...

  3. 【SQLSERVER】动态游标的实现

    方法1: CREATE   TABLE   #tabTmp(id   int)    INSERT   #tabTmp   EXECUTE('SELECT   id   FROM   '+@Table ...

  4. css中定位功能的特性

    它有四大特性,页面找不到盒子的情况 1.z-index值表示谁压着谁,数值大的压盖数值小的 2.只有定位了的元素,才有z-index.也就是说,不管相对定位,绝对定位,固定定位,都可以使用z-inde ...

  5. 【Django】用pycharm初学习使用Django

    开发框架流程 M V C(99%的开发都是这种流程.) 1.URL控制器 2.Views 视图 3.models 库   1.首先创建一个Django   2.创建成功后里面几个模块的功能   用它来 ...

  6. P4329 [COCI2006-2007#1] Bond

    题意翻译 有n 个人去执行n 个任务,每个人执行每个任务有不同的成功率,每个人只能执行一个任务,求所有任务都执行的总的成功率. 输入第一行,一个整数n (1≤n≤20 ),表示人数兼任务数.接下来n ...

  7. 如何添加ORACLE 的 ODBC

    找到  C:\windows\SysWOW64\odbcad32.exe 新增odbc ,提示 报错忽略,一直点确定就是,会建成功的! 点OK即可.新建完毕

  8. 【HDU4336】Card Collector(Min-Max容斥)

    [HDU4336]Card Collector(Min-Max容斥) 题面 Vjudge 题解 原来似乎写过一种状压的做法,然后空间复杂度很不优秀. 今天来补一种神奇的方法. 给定集合\(S\),设\ ...

  9. 【BZOJ1054】移动玩具(搜索)

    [BZOJ1054]移动玩具(搜索) 题面 BZOJ 洛谷 题解 这种小清新搜索题写出来好舒服啊. 要是原来的我来写代码肯定又臭又长吧.. #include<cstdio> #includ ...

  10. 【BZOJ3294】放棋子(动态规划,容斥,组合数学)

    [BZOJ3294]放棋子(动态规划,容斥,组合数学) 题面 BZOJ 洛谷 题解 如果某一行某一列被某一种颜色给占了,那么在考虑其他行的时候可以直接把这些行和这些列给丢掉. 那么我们就可以写出一个\ ...