c# 的一些基本操作或属性
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# 的一些基本操作或属性的更多相关文章
- 【日常操作记录】Asp.Net Core 的一些基本操作或属性
用于记录在项目中使用到的方法.属性.操作,持续更新中 静态文件的使用 在项目中静态文件的使用需要在Startup中的Configure方法中增加: //使用静态文件 app.UseStaticFile ...
- 【操作记录】Asp.Net Core 的一些基本操作或属性
用于记录在项目中使用到的方法.属性.操作,持续更新中 .net core 开源地址 图片上传: public async Task<IActionResult> Upload([FromS ...
- 深入理解javascript对象系列第二篇——属性操作
× 目录 [1]查询 [2]设置 [3]删除[4]继承 前面的话 对于对象来说,属性操作是绕不开的话题.类似于“增删改查”的基本操作,属性操作分为属性查询.属性设置.属性删除,还包括属性继承.本文是对 ...
- JavaScript笔记01_基本操作
目录 1. JS代码编写的位置 2. 为什么JavaScript中代码要以分号结束 3. 字面量和变量 4. 数据类型 5. 类型装换 6. ++a和a++ 7. 逻辑运算符 8. 相等运算符 9. ...
- Java 集合系列01之 总体框架
Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.*Java集合主要可以划分为4个部分:List列表.Set ...
- Java集合系列:-----------01集合的整体框架
内容来自:http://www.cnblogs.com/skywang12345/p/3308498.html Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映 ...
- 用pywinauto进行win32应用程序的测试
之前做win32应用测试时,用过很多大家耳熟成详的工具,接触pywinauto之前,对它的了解也不多,然而,随着对它了解的增多,发现它借助了python动态对象的能力,使得代码即便于书定,也便于阅读, ...
- Java 集合系列 01 总体框架
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- 《Genesis-3D开源游戏引擎-官方录制系列视频教程:基础操作篇》
注:本系列教程仅针对引擎编辑器:v1.2.2及以下版本 G3D基础操作 第一课<G3D编辑器初探> G3D编辑器介绍,依托于一个复杂场景,讲解了场景视图及其基本操作,属性面板和工具栏的 ...
随机推荐
- 软工1816 · 作业(十二)Beta答辩总结
组长博客 宣传视频 github团队项目仓库 本组成员 队员姓名与学号 124 王彬(组长) 206 赵畅 215 胡展瑞 320 李恒达 131 佘岳昕 431 王源 206 陈文垚 209 陈志炜 ...
- 结对作业(1.0版)(bug1已修复)
import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing ...
- 09_Java面向对象_第9天(类、封装)_讲义
今日内容介绍 1.面向对象思想 2.类与对象的关系 3.局部变量和成员变量的关系 4.封装思想 5.private,this关键字 6.随机点名器 01面向对象和面向过程的思想 A: 面向过程与面向对 ...
- 简单Profibus/DP实验系统的组建
转自:http://www.dndev.com/Profibus/profibustr/system_4.html 引言: 为了让更多刚接触到Profibus系统的朋友能对Profibus的网络架构及 ...
- NServiceBus官方文档翻译(一)NServiceBus 概况
NServiceBus 概况 NServiceBus 被设计用来组合面向业务的服务,它并不是用来替代诸如 WCF 一类的RPC技术. NServiceBus 不只包含通信模块,像其他成熟的SOA和DD ...
- vue2.0 keep-alive 最佳实战(转载)
1.基本用法 vue2.0提供了一个keep-alive组件用来缓存组件,避免多次加载相应的组件,减少性能消耗 <keep-alive> <component> <!-- ...
- SQLSERVER 的资源限制
https://docs.microsoft.com/en-us/sql/sql-server/maximum-capacity-specifications-for-sql-server?view= ...
- [转贴]infoQ VSTS被拆成5个部分,以Azure DevOps服务形式推出
VSTS被拆成5个部分,以Azure DevOps服务形式推出 http://www.infoq.com/cn/news/2018/09/vsts-divide5parts-azuredevops?u ...
- .NET Core 中的并发编程
今天我们购买的每台电脑都有一个多核心的 CPU,允许它并行执行多个指令.操作系统通过将进程调度到不同的内核来发挥这个结构的优点. 然而,还可以通过异步 I/O 操作和并行处理来帮助我们提高单个应用程序 ...
- java 一般类属性设置常量 用以长久使用
java 一般类属性设置常量 用以长久使用 一直引用 例如 文件名