[转载]asp.net泛二级域名解析

mikel阅读(994)

[转载]asp.net泛二级域名解析 – 好工具站长分享平台.

最近项目上需要泛二级域名解析,参考了网上的方案,然后结合自己的需求做了一个示例。需求如下:

1、我们的域名是domain.com服务器用一个相同的IP地址;

2、www.domain.com 指向服务器中我们自己的index.aspx;

3、xxx.domain.com 指向服务器中客户的site.aspx;

4、我们自己的页面和客户的页面都在一个网站项目下;

 

具体做法如下:

1、引用微软URLRewriter项目,并修改其中BaseModuleRewriter.cs和ModuleRewriter.cs的源代码;

 

protected virtual void BaseModuleRewriter_AuthorizeRequest(object sender, EventArgs e) 方法中:

Rewrite(app.Request.Path, app);

修改为:

Rewrite(app.Request.Url.AbsoluteUri, app);

 

protected override void Rewrite(string requestedPath, System.Web.HttpApplication app) 方法中:

string lookFor = “^” + RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, rules[i].LookFor) + “$”;

修改为:

string lookFor = “^” + rules[i].LookFor + “$”;

2、修改网站项目的web.config文件

添加:

<configSections>

   <section name=”RewriterConfig” type=”URLRewriter.Config.RewriterConfigSerializerSectionHandler,URLRewriter” />
 </configSections>

 

<RewriterConfig>
   <Rules>
     <RewriterRule>
       <LookFor>http://www\.domain\.com/</LookFor>
       <SendTo>~/index.aspx</SendTo>
     </RewriterRule>
   </Rules>
   <Rules>
     <RewriterRule>
       <LookFor>http://([a-zA-Z|0-9]+)\.domain\.com/</LookFor>
       <SendTo>/site.aspx?code=$1</SendTo>
     </RewriterRule>
   </Rules>

</RewriterConfig>

在system.web节中加入

<httpModules>

<add type=”URLRewriter.ModuleRewriter, URLRewriter” name=”ModuleRewriter”/>
</httpModules>

3、修改域名DNS,将*.domain.com的域名指向服务器的IP地址;

4、配置IIS,去掉网站主机头,然后添加aspnet_isapi.dll的映射处理程序;

特别注意:如果是IIS7以上版本,请将网站应用程序池类型修改为“经典”;

[转载]jsonp请求url长度过长的替代(ajaxcdr的使用)

mikel阅读(1428)

[转载]jsonp请求url长度过长的替代(ajaxcdr的使用) – 我有我在 – 博客园.

问题描述:跨域使用jsonp时url过长的问题

问题解释:

跨域请求时,若用jsonp请求(详情见:MVC4 Web Api 与 Ajax交互存在的跨域问题总结)jsonp因是请求的script标签,所以都是get请求,get请求的参数当然是在url后面传过去的了。因浏览器对url有长度限制,所以当提交一篇文章的长度时,就会出现url长度过长的错误。导致请求失败

解决办法:

因之前用过uploadify插件上传文件,他是用flash的跨域提交实现的(基于安全沙箱策略文件crossdomain.xml,详情:回头再说:Uploadify跨域上传原理),所以想到肯定有用flash解决跨域请求的问题, google了“flash ajax插件”查到AJAXCDR:利用 Flash 完美解决 JavaScript 和 AJAX 跨域 HTTP POST/GET 表单请求[原创] 这位博主实现了用flash跨域请求(get,post方式)。

使用:

1.在被请求的站点下的根目录放置安全沙箱策略文件crossdomain.xml,详情(Flash安全沙箱和跨域文件

2.(ajaxcdr包含两个文件)页面引入ajaxcdr.js(一定要引入在</body> 结束符之前。否则,在IE下无法生效。也可能提示flash版本问题什么的),在ajaxcdr.js中搜索“var swfName”将其值替换为ajaxcdr.swf的路径。例如:var swfName = “/Content/ajaxcdr/ajaxcdr.swf”;

扩展:

1.ajaxcdr.js文件有个方法定义为$()与JQuery冲突,将其改成ajaxcdr或者其他,并在下边56行左右调用的时候改成相同的即可

2.该文件定义的发送请求的函数AjaxCrossDomainRequest第三个参数必须是formname,如果没有参数或者不想用表单的时候就不方便了,以下修改便可实现传参进去。AjaxCrossDomainRequest方法改写如下:

function AjaxCrossDomainRequest(url, method, formnameordata, callback) {
method = js_strtoupper(method);
AjaxCrossDomainResname = callback;
var contentType = "application/x-www-form-urlencoded";
var body = '';
if (formnameordata==""||formnameordata.indexOf('=') &gt; 0) { body = formnameordata; } //判断是form或者是data(11=22&amp;22=33)
else {
var formname = formnameordata;
var form = document.forms[formname];
for (var i = 0; i &lt; form.length; i++) {
//如果是单选按钮、复选框、单选下拉框
if (form.elements[i].type == "radio" || form.elements[i].type == "checkbox" || form.elements[i].type == "select") {
if (form.elements[i].checked &amp;&amp; form.elements[i].name != "") {
body += encodeURI(form.elements[i].name) + '=' + encodeURI(form.elements[i].value) + '&amp;';
}
}
//如果是多选下拉框
else if (form.elements[i].type == "select-multiple" &amp;&amp; form.elements[i].name != "") {
for (var sm = 0; sm &lt; form.elements[i].length; sm++) { if (form.elements[i][sm].selected) { body += encodeURI(form.elements[i].name) + '=' + encodeURI(form.elements[i][sm].value) + '&amp;'; } } } //Button、Hidden、Password、Submit、Text、Textarea等文本类型 else { if (form.elements[i].name != "") { body += encodeURI(form.elements[i].name) + '=' + encodeURI(form.elements[i].value) + '&amp;'; } } } } var fs = FlashHelper.getFlash(); //fs.loadPolicyFile("http://domain/blah/crossdomain.xml"); if (js_substr(body, -1, 1) == "&amp;"){ body = js_substr(body, 0, -1); } if (method == "GET"){ //GET请求方式 var urlget = ""; if (js_substr(url, -1, 1) == "?"){ urlget = url + body; } else if(js_strpos(url, "?") &gt; 0 &amp;&amp; js_strpos(url, "=") &gt; 0){
urlget = url + "&amp;" + body;
}
else {
urlget = url + "?" + body;
}
fs.XmlHttp(urlget, "displayResponse", method, "", contentType);
} else {
//POST请求方式
fs.XmlHttp(url, "displayResponse", method, body, contentType);
}
}

修改后的文件下载地址:http://files.cnblogs.com/woyouwozai/ajaxcdr.rar

这样的话 如果要想传入form表单的参数就传入一个form的名字,如果不想传值就把formnameordata参数传为空(“”),如果是自己拼的参数就参数形如“11=22&22=33”的参数即可。

调用方法:AjaxCrossDomainRequest(url + “/Add”, “POST”, “Guid=” + $(“#mailguid”).val() , “alert(AjaxCrossDomainResponse );”);

至此才算是可以放心使用了。

还有个朋友在网上说“ 原来的ajaxcdr.js  编码格式 ANSI编码,需将此编码格式更改为UTF-8 编码格式。否则在IE中会出现fs.XmlHttp  “object doesn’t support this property or method” 的错误”    这个暂时还没有遇到。

[转载]基于SaaS的都昌商业平台设计

mikel阅读(1193)

[转载]基于SAAS的都昌商业平台设计 – 袁永福 电子病历,医疗信息化 – 博客园.

基于SAAS的都昌商业平台设计

袁永福 2012-8-16

 

本设计是针对大中型互联网企业,能构造出一个能长期健康稳定、滚动发展的基于SAAS的电子商业平台。命名为都昌商业平台。

 

概要

本商业平台是面向中小型服务性商家的,它是以管理软件租赁业务为基础的,统一各个商家目前各自为战的会员管理、市场促销管理,并解决消费者的会员卡管理方面的诸多问题,实现消费者、商家、公司三方共赢的长期互利局面。

目前计划大体进行“软件租赁业务à商业平台à平台增值服务”三步走来建设该商业平台,这是从公司目前的条件出发,步步为营,稳扎稳打,积极创新而又不失务实,在三到五年的时间内建设好初具规模的电子商务平台。

建立起该电子商务平台后,其中的商家、消费者、都昌公司都能获得利益。

从商家的角度看,可以低成本的获得良好的信息化服务,降低了内部管理成本,而且获得更多的客户量,实现开源节流。

从消费者的角度看,可以一卡通用,会员资金安全,消费方便,能获得更多的折扣,得到相当大的实惠。

从公司的角度看,可以获得稳定的软件租赁收入,数量巨大的商家和消费者,可以托管一大批无息会员费。

该商业平台将是长期而繁荣的,在为广大商家和消费者带来好处的同时,也必然能让公司的盈利登峰造极,成为一家全国性的实力派企业。

商业平台架构

本商业平台架构如下

 

该电子商业平台有三个层次,第一层是基础,就是以企业管理软件租售业务;第二层是建立商业平台,发行平台会员卡;第三层就是在商业平台的基础上提供增值服务。

管理软件租赁业务

管理软件租赁业务是该商业平台的基础,没有软件租赁,商业平台基本不可行,而且对于软件公司,从管理软件入手也能降低平台建设难度。

下图是软件租赁业务的架构

在这个架构中,IT公司建设一个软件租赁平台服务器,包含一些信息管理方面的服务,包括员工管理、会员管理、消费计费、进销存等服务。特别的是还包含了一个中心数据存储服务。

在商家安装一个客户端软件,通过因特网连接平台服务器。商家操作客户端软件完成其信息管理和业务活动。

客户端软件可以在本地进行数据存储,也可以调用中心服务器的数据存储,或者本地数据存储的同时使用中心服务器的数据存储做备份。

软件租赁业务的推广可能具有以下几个问题

1.       业务性质。一些IT企 业尚无企业信息化管理软件的开发和经营经验,因此开发和推广适合中小企业使用的管理软件是需要花费一定的时间进行摸索。不过本商业平台是面向中小企业的, 目标客户业务简单,软件价格低廉,具有一定实力的软件公司在这方面是有优势的。而且客户的业务容易标准化化,能降低软件开发成本。

2.       渠道。一些IT公司缺乏企业信息管理软件的渠道。还需要花大把的时间建设渠道,此后还要建立软件售后服务体系。

3.       服务。大量的地理上分散的商家采用软件租赁后,IT公司需要建立一个强大的技术支持和服务团队来维护软件租赁体系。

 

软件租赁业务具有以下几个技术难题

1.       安全。商家的业务数据包含了大量的财务数据,这些数据需要非常安全可靠的处理。而技术平台运行在开放的因特网上,环境复杂,黑客众多,因此软件租赁业务提出了非常高的安全要求。

2.       性能。软件租赁业务会出现海量数据存储和大量用户并发访问的情况,对技术平台提出了非常高的性能要求。比如可以设想,当该平台包含了10万个商家,也就是同时有10万个客户端程序连接服务器,每个商家每天完成400次交易,则系统每年处理146亿次交易,几年下来中心服务器就会存储上千亿条数据,这些都是非常高的性能需求。

3.       网络异常。商家客户端软件是通过因特网连接服务器的。而网络很容易出现异常,当客户端软件暂时无法连接服务器时,而商家的业务必须不受影响的进行,此时客户端软件需要很好的离线运行功能。若商家是连锁经营,则网络异常时会员卡在各个连锁店的消费实时记录是个难题。

竞争对手分析

目前国内已经出现了一些中小企业信息管理软件租赁服务提供商。

用友集团下的 伟库云 http://www.k.cn/

网站是一个基于B/S的云计算服务平台。开通了电子商务(旺铺、网客宝、E名惊人、商机推广(国内版)、商机推广(国际版)、Shopex商派网店、客盈门),企业管理(在线记账、在线现金管理、在线进销存、在线CRM、在线管客宝、在线订货平台、在线代帐平台、在线合同管理、用友NC云托管、用友U8云托管、用友CRM云托管)等18个服务。

根据笔者的试用,这是一个完全的基于B/S网站,具有相当专业的财务管理流程。

用户租赁服务时是使用支付宝等网络支付手段一次性支付租金。租赁到期后服务时效。

金蝶的友商网 http://www.youshang.com/

和用友的伟库云类似。

用友和金蝶已经积累了丰富的企业软件开发经验和强大的渠道,是有力的竞争对手,还要深入研究。

根据初期的商家用户调查,大多数商家很在乎软件的功能和使用方便快捷,而纯B/S的网站系统用户体验不大好,响应有迟钝,无法快速录入业务数据。在高速开展业务的应用环境下,还是使用客户端软件快捷方便。

电子商业平台资金流程

本商业平台资金流程设计如下

 

商业平台与商家的资金流程

在这个流程中,商业平台在银行中设立一个平台账户,而参与软件租赁服务或者商务平台的商家也在银行中设立一个商家账户,商家账户和平台账户之间实现了自动转账。

1.       商家在商家账户中预先存入一笔钱。这个钱用于支付今后的软件租赁费用或其他费用,而且账户余额不得低于特定的金额(这个金额称为准备金额),当账户余额过低时,商业平台将通过商家的客户端软件提示商家向商家账户充值。若商家租赁费用欠费,则商家的客户端软件暂停使用。

2.       每月底,商业平台和客户进行业务费用的结算,自动的将租赁费用从商家账户划到平台账户。

3.       当消费者在商家向商家私有的会员卡充值时,商业平台和商家无资金来往。

4.       当消费者在商家向平台会员卡充值时,商家接受消费者的现金自用,而商业平台实时的将等额金额从商家账户划到都昌账户。

5.       当用户使用平台会员卡在商家消费结账时,商业平台进行费用记录,然后定期与商家结清,将都昌会员消费金额从都昌账户中划到商家账户。

若商家并没有开设银行账户供自动转账,也可以建立网络支付账户,然后通过网络支付来进行资金流动。这方面需要与网络支付平台进行深入交流看看手段是否可行。

商业平台与消费者的资金流程

商业平台开通网络支付接口,消费者可以直接通过商业平台进行平台会员卡的充值。还可以考虑向消费者提供退卡提现的功能,不过退卡提现可能成为洗钱的途径。

 

电子商业平台

在软件租赁业务的基础上,运营商可以建设和运营电子商业平台。电子商业平台和软件租赁平台是两个平台,使用软件租赁的商家可以不加入商业平台,而不使用软件租赁的商家也可以加入该商业平台。不过大部分商业平台中的商家还是采用软件租赁业务。

商业平台制度大致如下

平台会员卡制度

将采用四步实现都昌会员卡制度

第一步,通用消费者标示卡。

在软件租赁业务中,技术平台将所有商家的会员管理起来,统一使用平台会员卡,这种会员卡只是用于标识会员认证信息,这样可以初步做到会员卡介质统一,各个商家不必为同一个消费者重复分发会员卡,而且对于会员打折促销,各个商家各自为战。

为了更好的服务商家,平台运营商开通网络支付接口,代商家进行会员卡充值业务,充值金额自动的从商业平台银行账户划到商家的银行账户,运营商对会员费不做任何担保。

●从商家的角度看

商家发行会员卡肯定会在卡上 面印刷本商家的广告,而当统一使用商业平台会员卡时,卡上将印刷关于商业平台的标识或广告,这可能导致商家不愿意接受平台会员卡。此时可以考虑会员卡统一 由运营商免费提供,商家可以节省购买空白卡的成本。而且缴纳押金后刷卡设备可以从运营商租赁,这样进一步的降低商家的成本,促使支持会员卡。

此时平台会员卡制度帮助商家实现了“节流”的目标,但还未达到更重要的“开源”的目标。

●从消费者的角度看

这样初步可以做到会员卡介质统一,可以解决多张会员卡携带不便的问题;而且商业平台还可以开通会员卡消费短信通知以及月底自动发送消费记录的电子邮件,从而更清楚的掌握自己的消费信息;还可以通过网上向卡里充值。

但此时会员费用还是分商家充值的,充值金额只能在各个商家内部消费用,不能互通,没有第三方担保卡中的钱。

●从运营商的角度看

商家成为平台会员卡的免费发行点,可以迅速的大量发行会员卡,每张卡都是商业平台的广告。

此外由于卡数量巨大,可以从磁卡供应商中获得较低的批发价格。初步询价,5万张非接触式IC1.2/张,1000IC卡读写器186/台。

运营商还可以通过技术平台监控商家的发卡情况,若计算出商家处剩余的空白卡数量不足则可以主动补充,这样按需供应而又不浪费。

第二步,通用打折卡。

在商业平台会员卡发行一定的数量后,运营商掌握了一定的用户数量,就可以同一些商家谈判,推广会员卡的打折业务。任何消费者在会员商家消费时刷会员卡都可以获得折扣。这样就可以形成一个循环,那就是“一定的会员数à一定的商家加入à提供一定的折扣à更多的会员数à更多的商家加入à更大的折扣à更多的会员数”。

为了刺激消费,平台会员卡可以按照消费能力实行分级制度,消费能力越强,等级越高,则获得的折扣就越多。此外商业平台还可以和商家联合搞积分制度。

从商家的角度看

商家将获得更多的客户群。

可以假设,全南京城一天有10000个人进行了足疗消费,由于商业平台刺激的消费,有12000个人进行了足疗消费,此时消费人数增加了20%,整个足疗行业营业额增加了20%,所有的足疗店分享了这增加的20%的营业额,至于能分享多少则看各家的能力了。

●从消费者的角度看

会员卡是通用打折卡,可以在任何会员商家中享受实实在在的优惠,而且能利用综合的消费能力达到更高的等级,获得更多的实惠。

比如在甲商场实行月消费2000元能打1折,月消费3000元能打2折的政策刺激消费。

但某消费者在商场月消费是1000元,但在乙酒楼月消费4000元。这样他在商场只能享受1折的优惠。

而在平台会员制度中,月消费3000元打1折,4000元打2折,这样他加入平台会员制度后以总月消费1000+4000=5000元的消费能力获得在商场中的2折的优惠。此时他利用了分散在各个商家中的消费能力而形成强大的综合消费能力来获得更高的折扣,得到更多的实惠。

从运营商的角度看

当持平台会员卡的人数达到很大的规模时,将在市场中占有强势地位,有能力让商家纳入电子商业平台,此时由软件租赁业务推广商业平台变成由商业平台推广软件租赁业务。

比如南京某类市场有100万消费人群,其中有20万持会员卡,电子商业平台影响着20%的消费者,而其他的商家都是散户,最多不超过5%,此时电子商业平台占据非常强势的地位,这样以巨大的消费者群体为交换条件,就能将众多的商家收入该商业平台中。

而且大量的持卡消费者消费时询问商家是否支持电子商业会员卡,或者周边的商家加入该商业平台,这也刺激了非会员商家考虑加入该商业平台。

当电子商业平台在各类消费市场中占据了强势地位,此时运营商就可以从容不迫的进行会员卡制度的升级了。

第三步,单方面的带充值功能的通用会员卡。

电子商业平台提供充值接口,消费者可以不经商家而直接向都昌会员卡中充值,充值金额直接给商业平台。当消费者在商家刷平台会员卡付费时,商业平台自动的将消费金额从商业平台的银行账户划到商家的银行账户。平台运营商对会员费做担保。

这是一种只针对电子商业平台的单方面的充值业务,充值过程和商家无关。

从商家的角度看

商家接受会员卡刷卡消费并没有什么利益损失,而且消费手段的方便能刺激消费,提高营业额。

但这种制度会冲击商家原有的预充值会员消费制度,拉紧了商家的资金链。此时平台运营商需要使用巨大的持卡客户人数来让商家接受这种制度。

●从消费者的角度看

平台会员卡真正实现了一卡通用,统一标识身份,统一充值,统一付费方式。这大大方便了消费手段,提高了资金安全性。

不过美中不足的就是充值手段还比较单一,目前大量的人群还不会网上充值。

●从运营商的角度看

平台会员卡增加了一点金融属性,平台运营商托管了大笔的没有利息的会员费,这是一块值得发挥的地方。

但这种制度会大大增加商业平台复杂度,将比较大的增加商业平台的运营成本,需要接受国家金融管理机构的控制。总体来说来时利大于弊的。

类似的,支付宝也托管着大笔的没有利息的现金,但相比于支付宝,平台会员卡不能提现,而且会员消费金额不会突增,因此为支付会员消费的消费准备金数量比较低,大部分钱都可为平台运营商支配使用。而支付宝是可以提现的,支付宝公司需要准备大量的现金来应付可能的大额提现。

第四步,全面的带充值功能的通用会员卡。

在平台会员制度比较强大时,可以升级为带有充值功能的通用会员卡制度。此时平台运营商和商家谈判,使商家成为平台会员卡的充值代理点,商家接收消费者的充值的现金,而商业平台自动的将充值金额从商家的银行账户划到商业平台的银行账户。

●从商家的角度看

商家成为会员卡充值代理点,能获得一定的佣金来抵扣软件租赁费用。而且很容易吸引上门充值的持卡人同时进行消费。

由于充值方便,能够大范围的打折,这能有效的刺激消费,给所有的商家带来更多的消费者,提高大家的营业额。

●从消费者的角度看

消费者充值方便,能大范围的享受不小的折扣,有统一的积分返利,会员资金安全,一卡通用,消费方便,这些都是实实在在的利益,这些都能和其他消费者有着相当的优越性。

从平台运营商的角度看

数量巨大的商家成为平台会员卡的发行和代理充值点,扩大平台会员充值途径,这样能进一步扩大平台会员数量和充值金额,获得更大的托管会员费金额。

由于刺激了消费,商家的交易增加,平台运营商的软件租赁收入也会增加。

不过在实行中商家可能不诚信搞假充值骗钱,当消费者给商家现金要求充值时,商家收钱后并没有真正充值还声称充值完毕,而商业平台的技术部分不能感知充值活动,此时会给消费者和都昌商业平台带来损失。

对此,运营商可以这样处理

1.       严厉惩罚骗充值费的商家,重罚甚至开除出商业平台,并保留法律维权的手段。

2.       可以为消费者开通充值手机短信动态密码或通知服务防止被骗,也可要求消费者在充值单上签名。

 

经过以上四个步骤,在平台运营商的主导下,商家、消费者和运营商共同建立起强大的电子商业平台会员制度,而且通过会员制度,运营商保持对商业平台的控制权,三者都能从中获得巨大的规模效益。

电子商业平台商家制度

相对应平台会员制度,在软件租赁的基础上,商业平台建立起一套商家制度。

第一步,软件租赁商家制度

任何使用了平台软件租赁业务的商家都是商业平台的会员商家。

使用软件租赁业务的商家需要建立一个银行账户,开通为同都昌商业平台银行账户的自动转账权限,并在该银行账户存入一定的金额用于支付软件租赁费用或其他业务费用。

都昌公司在商业平台中启动商家的权限,在商家处下载安装客户端软件,商家开始使用软件租赁业务。此时在商家店堂上打上初级都昌会员商家标识。

第二步,支持通用的消费者标识卡

在平台的支持下,商家支持通用的消费者标识卡。凭卡或者等价的方式标识消费者,接受会员充值和刷卡消费。此时可以在商家店堂上打上中级都昌会员商家标识。

第三步,支持通用打折卡

       商家参加都昌商业平台的通用打折扣制度,凡对于持都昌会员卡的消费者都有一定的折扣。此时可以在商家店堂上打上高级都昌会员商家标识。

第四步,都昌会员卡充值代理

       商家参加都昌商业平台充值代理制度,可以代都昌公司为消费者提供充值服务。充值金额将从商家的银行账户划到都昌商业平台的银行账户。此时可以在商家店堂上打上特约都昌会员商家标识。

 

竞争对手分析

钱旺 http://www.qianwang365.com

钱旺网,由江苏钱旺网络科技 有限公司独立开发运营。其核心是整合资源进行营销推广服务,即全面整合消费行业的优质商家,为其提供消费客源、精准营销、广告推广及真伪验证等营销服务, 以锁定现有客户群并为其争取更多的客户资源。钱旺网,自主创新研发的“拆楼”游戏正是形成这一格局的有利保障之一。

 

钱旺网新推出的“返钱乐”项 目,旨在帮助身处同质化、竞争白热化的商家能够立于不败之地。商家与钱旺网达成合作后,消费者在该商家消费后,为其提供与消费金额等额的“返钱乐”钱票, 作为消费者参与“返钱乐”活动的凭证。消费者凭“返钱乐”钱票,按照使用步骤,登陆钱旺网,参与“返钱乐”活动,即可轻松获得商家承诺的折扣金额。同时, 消费者还可凭此钱票参与钱旺网的“拆楼”游戏,从而获得更多惊喜。当消费者体验过“返钱乐”活动和“拆楼”游戏的重重惊喜与乐趣后,将主动带动身边客源前 去消费,从而使得商家不再需要采取价格战等内部调整战略,依然可以稳定客源并且创造更多价值。

钱旺网是一家电子商务类型的营销平台。通过线下的媒体资源,线上的推广等方式和商家一起推广商家的品牌和商品。

 

对于消费者来说

商家通过馈赠终端用户返钱乐钱票的方式,让用户获得一定数额的折扣,并获得积分。同时积分还能参与拆楼中最高5000元现金大奖活动。用户获得真正的实惠的同时,还可以凭自己把握时机的能力获得更大的实惠。

 

钱旺网官方称其在南京做线下的商家营销活动,已经签约的商家已经有400多家。而钱旺网目前也针对线上的如火如荼的电子商务网店进行了推广,比如淘宝网店,拍拍网店等。期望能和广大的线上线下商家一起,创造更多的财富的同时让广大消费者或者实实在在的实惠。

钱旺的执行流程如下

1.         消费拿票
消费的时候消费者向商家咨询和索要钱票,在和钱旺网的合作商家处可以获得钱旺网官方印制的钱票,钱票会是消费者在消费时候获得折扣的有效途径之一。

2.         返钱积分
消费者登录钱旺网,输入获得的钱票信息,折扣的现金就会到消费者的帐户,简单的转账手续之后,现金将直接进入银行账户。根据和商家合作的不同,消费者还将获得不定数额的积分。

3.         拆楼中奖
消费者在钱旺网的刮票返现的同时获得的积分可以参与拆楼游戏,目前100积分可获得拆一层楼的机会,最高可获得5000元的大奖。

对于商家来说

如今网上的竞争如此激烈,商家使出浑身解数打出各种促销牌,这确实是争取客户的一个有效方法,当然,这样会使得自己的利润变薄,钱旺网为卖家提供的正是这样的解决方案。

1.         卖家无需焦头烂额地想着多种促销手段,如赠送礼品,购买达到一定金额后,包快递等等。您还可以赠送钱票,让买家自行选择,突出卖家增值服务的多样性。当然,这样也大大减少了您参加各种活动的成本。

2.         在 网上购物时不难发现,很多卖家都在卖相同或是相似款式、功能的物品,卖家都希望买家能第一次挑选您的物品,详谈细节,这样成单的几率将会增加。钱旺用户均 须通过真实手机号码注册,其消费信息诸如何时何地消费了多少等,在钱旺网后台一目了然,这也正是钱旺为特约商户锁定用户消费信息的基础。在此基础上,钱旺 可以通过各种方式为特约商户提供精准营销服务,为身处产品同质化、竞争白热化的商家提供战胜竞争对手的有力武器。

3.         卖 家都希望买家成为终一品牌消费者,这就需要增加客户的黏着度,除了产品质量过硬、服务要好之外,平时与买家交心的沟通也是关键。钱旺网有“组团兑奖”的增 值服务,卖家提供钱票给买家后,为了增加买家中大奖的几率,还可邀请买家参与到自己的团队中,帮助他们中取大奖,而这些奖金是由钱旺网提供的。卖家无需担 心额外的负担,又可稳定买家。

 

电子优惠卷

电子优惠券是最近金融危机之 下被各大媒体炒热的一种消费服务领域的概念。严格意义上讲,电子打折券与电子代金券统称为电子促销券(或电子优惠券)。电子促销权券指由各商家发放,以各 种电子媒介形式制作、传播和使用的促销优惠凭证。电子促销券通常所使用的电子媒介形式包括互联网Web)、手机网络(WAP)、短信和彩信。

在南京的电子优惠券提供商有会购( http://www.5higo.com/),维洛城等等。

会购 | 5higo(南京会购信息科技有限责任公司)是大贺集团全资子公司,专业从事优惠信息及产品提供,并通过网站、会购无线终端等方式提供优惠券打印服务。涉及众多城市生活消费领域(包括但不限于餐饮、娱乐、休闲、购物、旅游等)。 购买会购卡,成为会购会员,即可在分布于南京各大商圈、高校、地铁的会购无线终端打印优惠券,即时消费就能体验到会购给所有会员带来的省钱优惠服务。

相对应其他的商业平台竞争对手,都昌商业平台最大的优势就是有软件租赁为基础,具有扎实的技术支持,能将商业平台与客户的业务系统融合在一起。

从商家的角度看,商业平台和自身的业务系统已经融合在一起,当向消费者提供优惠时即可在收费的时候实时完成,对于折扣让利的控制收发自如,管理简单。

从持卡消费者的角度看,无需做准备即可实时的享受商家的折扣。

商家提供消费优惠时在客户付费的同时实时的完成,而消费者就能实时的享受优惠。

平台增值服务

在商业平台上可以考虑进行多种增值服务。目前构思的有:

门户网站

可以在商业平台的基础上面向消费者建立门户网站,开展类似点评,团购等业务。

短信群发

商业平台向商家提供短信群发的业务,商家可以在其会员顾客的生日或春节的时候花10分甚至15分的价钱通过平台发送一条问候短信,这样能改善用户体验,增强客户忠诚度。当大量的商家通过平台发送短信时,平台每天都会发送成千上万条短信。而都昌公司就可以从电信运营商处批发短信指标,此时平台每发送一条短信价格只有几分钱,而公司就可以从中赚取价差。

当然可能有会员讨厌商家发送的短信,因此可以让其方便的屏蔽短信。而且商业平台也需要惩罚乱发短信的商家。

用户消费行为查询

商家只能查看消费者在本商家中的消费行为记录,不能看他们在其他商家的消费行为。不过允许商家通过付费的方式看到特定消费者在其他商家的消费行为,这能方便商家挖掘和研究大客户,提高客户的忠诚度,而都昌商业平台也可以以此获利。

统一积分制度

有些商家会对会员实行积分制,定期推出消费积分换礼品的工作。目前的积分制度有以下缺陷。

1.       从消费者的角度看,大量的积分分散在不同的商家,需要在各个商家中兑换积分,过程麻烦,在单个商家的积分有不够高,礼品比较小,懒得兑换。因此积分鼓励消费的制度并没有得到很好的执行,这种商家的促销手段效果不大。

2.       商家需要事先采购和管理积分礼品来兑付消费者的积分。这就存在库存、礼品不够或者浪费的情况,此外准确的发放礼品也产生了一些工作量,这些都带来了成本。

在商业平台的基础上,可以发行都昌用户积分,并可将一些商家的消费积分换算成标准的平台用户积分。商业平台统一积累和兑换积分。

这种统一积分制度具有以下优点

从消费者角度看,以前分散在各个商家的积分可以集中起来,比较容易实现较大额的积分量,拿到比较有价值的兑换礼品,而且兑换渠道单一,操作方便。

从商家角度看。统一积分制度会增加商家的成本,此时需要商业平台和商家之间进行利益交换。此时可以考虑商品平台向商家批量购买积分。

比如某商家的一个积分价值1分钱,商业平台以0.8分的价格批量收购商家的积分,然后以相当于0.5分的价值向消费者兑换积分,从中商业平台可以赚取0.3分钱的价差。

当某消费者有1万的积分,则商业平台以80元的价格收购这些积分,然后向消费者支付价值50元的礼品,则商业平台可以赚取30元;也可以让消费者兑换成40元现金价值存入到都昌会员卡中,此时商业平台可以赚取40元。而且商业平台并不向商家支付80元的积分购买费用,而是抵扣软件租赁费用,这样不会增加商业平台的成本。

从消费者的角度看,这个过程发生了积分贬值,但却可以放弃大量的分散的积分换取小额礼品而换得一个较高价值的礼品。这个过程可行需要经过深入的市场调查和费率调整。

从商家的角度看,商家是想通过积分兑换制度让消费者记住商家的牌子,而实际上消费者通过商业平台兑换积分是记住了运营商的牌子而不是商家的牌子,这不是积分制度的目标。因此商家对质疑积分兑换制度的效果,可能会取消积分制度,这可能是统一积分制度的主要障碍。

身份证验证

在商家招聘员工的过程中可能存在验证员工身份证信息的需求。此时需要通过公安部的身份证验证接口付费进行验证,验证一次要5元。

商业平台可以向商家提供身份证验证的功能,每次收费5元,每次验证后商业平台会缓存验证数据。但由于可能存在同一个人的身份证重复验证的过程,因此出现查询商业平台中缓存的身份证验证数据而无需再次付费调用公安部的身份证验证接口。这样对于每一次重复验证,商业平台都可以赚取5元。

不过这种增值服务受国家法律和规定的影响,需要进一步考虑其可行性。

政府调查通道

为了争取政府的支持,平台需要迎合政府,开通政府调查通道,方便政府调阅平台中的数据。

[转载]登录密码与HTTP Request

mikel阅读(964)

[转载]登录密码与HTTP Request – lzprgmr – 博客园.

我们知道,在一些主流的浏览器中按F12,就会拉出一个查看web访问详细信息的窗口, 在firefox中叫firebug,在chrome或者IE中,则叫developer tools,他们功能都大同小异,当然,比较重要的自然是查看http request与response, 幸运的是,这三个工具都把其放在一个叫Network的tab下面,虽然显示格式略有不同,但基本信息都是一样的。

当我们通过一个form提交信息的时候,如果是GET方式,form中的信息会以参数的形式附加在URL后面;如果是POST的方式,则包在 request的body中,但不论是那种方式,form中的信息,都会在http request中,而且可以用上面提到的工具查看到:如果这个form恰好是个登陆框,或者是支付框,那么你的用户名与密码自然也会出现在request 中。

就此,我针对三类网站做了实验:

1. 普通非加密网站:豆瓣(http://www.douban.com/)
无任何加密,密码自然如愿以明文方式显示在http request中:(chrome)

Form Data:
source:index_nav
form_email:test
form_password:test

 

2. https加密网站:GitHub(https://github.com/lzprgmr) + Google(http://www.google.com.hk/)

虽然这两个网站使用了https加密,但我们捕捉到的request,还是包含了密码明文:

Form Data: authenticity_token:9fsgNlzbnOD…..=
login:test
password:test
commit:Sign in

原因在与https(ssl)的加密是发生在Application layer与Transportation layer之间,所以,在传输层看到的数据才是经过加密的,而我们捕捉到的http request的,自然是应用层的,是还没经过加密的数据。

3. 带安全控件的支付类网站:支付宝(https://auth.alipay.com/login/index.htm

支付宝自然是https的,但是他的同时也增加了安全控件来保护密码, 以前认为这个只是用来防键盘监听的,其实,看下面http request截获的密码:这个安全控件把给request的密码也先加了密,紧接着https再加次密,果然是和钱打交道的,安全级别高多了:)

Form Data: logonId:test@gmail.com password:EgUw11BHmg7obmQNCckbCd1b ekN5Jv7 Fw41MXVMicEVsF/ehu9hhwB6V8eBGfQvWA8IqHEGClCJ1C97qg5Rp1zQSHLAf1DkgR97b99VRJ3LRjLKywAaWgs1gjW2AS9S49rDw 5ERUh3vK021/I9DiubHKZS4NUzdhfb6Hz8 iWyh3lWBO/3rw9ehtug/1dQJ9oje2CUpM0cR9DPjiLikOIZ0JSr/yCCz68VzfHmgdE8Rr 4yqO6titkKGh0dYek0hCck6yQ2d7XAkd/3U1YA2B4EQ47qKVNpBdienXRfrOn Egu7JBoSfsqcnvAosvRC 94diCJ Grz7hW2GJjlg==

[转载]Android 安卓开发参考书电子书 资料整理共享(点击书籍封面传送)

mikel阅读(1152)

[转载]Android 安卓开发参考书电子书 资料整理共享(点击书籍封面传送) – D.Winter – 博客园.

注:所有资源均来自互联网,此处只是介绍整理,如需要请支持正版。

网盘需要自行注册

精通Android 3

    本书在上一版的基础上进行了全面改进,增加了Android内部构件的相关知 识,介绍了线程、进程、长期运行的服务、广播接收程序和闹钟管理器。本版还介绍了更多UI控件,并用150多页的篇幅专门介绍了Android3.0版, 包括碎片、碎片对话框、ActionBar和拖放。此外,本书对服务和传感器的相关章节做了大幅改进,还对介绍OpenGL的章节做了修订,涵盖了 OpenGLES2.0。.本书囊括了Android开发人员所需的一切知识,既可为Android开发人员夯实基础,又能提高Android开发人员的 技能。

精通Android游戏开发

    本书讨论如何将pc 上的3d 游戏移植到android 平台。作者从必备的技能和软件工具入手,逐步介绍如何从头构建纯java 游戏,如何混合使用opengl 3d 图形和jni,并以真实的pc 游戏wolfenstein 3d和doom 为例,介绍如何融合java 的优雅设计和c 的强大功能,使混合游戏达到最佳性能。本书适合熟悉android 平台的开发人员阅读。

Android应用开发揭秘

    国内第一本基于Android 2.0的经典著作,5大专业社区联袂推荐,权威性毋庸置疑!本 书内容全面,不仅详细讲解了Android框架、Android组件、用户界面开发、游戏开发、数据存储、多媒体开发和网络开发等基础知识,而且还深入阐 述了传感器、语音识别、桌面组件开发、Android游戏引擎设计、Android应用优化、OpenGL等高级知识,最重要的是还全面介绍了如何利用原 生的C/C++(NDK)和Python、Lua等脚本语言(Android Scripting Environment)来开发Android应用;本书实战性强,书中的每个知识点都有配精心设计的示例,尤为值得一提的是,它还以迭代的方式重现了各 种常用的Android应用和经典Android游戏的开发全过程,既可以以它们为范例进行实战演练,又可以将它们直接应用到实际开发中去。

Android高级编程

    Android提供一个开放的开发环境,为针对移动设备编写创新应用程序带来了激动人心的新机遇。作为使用AndroidSDK构建这些应用程序的实 用指南书籍,《Android高级编程》从始至终穿插了一系列示例项目,每个项目都引入Android的新功能和新技术,以助您达到最圆满的学习效果。书 中介绍Android的所有基本功能,并通过简明扼要的示例引导您使用高级功能。

 疯狂Android讲义

    本书全面地介绍了Android应用开发的相关知识,全书内容覆盖了Android用户界面编程、Android四大组件、Android资源访问、 图形/图像处理、事件处理机制、Android输入/输出处理、音频/视频多媒体应用开发、OpenGL与3D应用开发、网络通信编程、Android平 台的Web Service、传感器应用开发、GPS应用开发、Google Map服务等。本书并不局限于介绍Android编程的各种理论知识,而是从“项目驱动”的角度来讲授理论,全书一共包括近百个实例,这些示范性的实例既可帮读者更好地理解各知识点在实际开发中的应用,也可供读者在实际开发时作为参考、拿来就用。

Android技术内幕:系统卷

 《Android技术内幕:系统卷》是国内首本系统对Android的源代码进行深入分析的著作。全书将Android系统从构架上 依次分为应用层、应用框架层、系统运行库层、硬件抽象层和Linux内核层等5个层次,旨在通过对Android系统源代码的全面分析来帮助开发者加深对 Android系统架构设计和实现原理的认识,从而帮助他们解决开发中遇到的更加复杂的问题。全书分为两卷,系统卷主要分析了Linux内核层、硬件抽象层和系统运行库层的各个模块的底层原理和实现细节;应用卷主要分析了应用层和应用框架层的各个模块的底层原理和实现细节。

[转载]了解ASP.NET MVC几种ActionResult的本质:FileResult

mikel阅读(1136)

[转载]了解ASP.NET MVC几种ActionResult的本质:FileResult – Artech – 博客园.

FileResult是 一个基于文件的ActionResult,利用FileResult我们可以很容易地将从某个物理文件的内容响应给客户端。ASP.NET MVC定义了三个具体的FileResult,分别是FileContentResult、FilePathResult和 FileStreamResult。在这篇文章中我们将探讨三种具体的FileResult是如何将文件内容对请求进行响应的。[本文已经同步到《How ASP.NET MVC Works?》中]

目录
一、FileResult
二、FileContentResult
三、FilePathResult
四、FileStreamResult
五、实例演示:通过FileResult发布图片

一、FileResult

如 下面的代码片断所示,FileResult具有一个表示媒体类型的只读属性ContentType,该属性在构造函数中被初始化。当我们基于某个物理文件 创建相应的FileResult对象的时候应该根据文件的类型指定媒体类型,比如说目标文件是一个.jpg图片,那么对应的媒体类型为 “image/jpeg”,对于一个.pdf文件,则采用“application/pdf”。

 1: public abstract class FileResult : ActionResult
 2: {
 3:     protected FileResult(string contentType);
 4:     public override void ExecuteResult(ControllerContext context);
 5:     protected abstract void WriteFile(HttpResponseBase response);
 6:
 7:     public string ContentType { get; }
 8:     public string FileDownloadName { get; set; }
 9: }

针对文件的响应具有两种形式,即内联(Inline)和附件(Attachment)。一般来说,前者会利用浏览器直接打开响应的文件,而后者会以 独立的文件下载到客户端。对于后者,我们一般会为下载的文件指定一个文件名,这个文件名可以通过FileResult的FileDownloadName 属性来指定。文件响应在默认情况下采用内联的方式,如果需要采用附件的形式,需要为响应创建一个名称为Content-Disposition的报头,该 报头值的格式为“attachment; filename={ FileDownloadName }”。

FileResult仅仅是一个抽象类,文件内容的输出实现在抽象方法WriteFile中,该方法会在重写的ExecuteResult方法中调 用。如果FileDownloadName属性不为空,意味着会采用附件的形式进行文件响应,FileResult会在重写的ExecuteResult 方法中进行Content-Disposition响应报头的设置。如下面的代码片断基本上体现了ExecuteResult方法在FileResult 中的实现。

 1: public abstract class FileResult : ActionResult
 2: {
 3:     //其他成员
 4:     public override void ExecuteResult(ControllerContext context)
 5:     {
 6:         HttpResponseBase response = context.HttpContext.Response;
 7:         response.ContentType = this.ContentType;
 8:         if (!string.IsNullOrEmpty(this.FileDownloadName))
 9:         {
 10:             //生成Content-Disposition响应报头值
 11:             string headerValue = ContentDispositionUtil.GetHeaderValue(this.FileDownloadName);
 12:             context.HttpContext.Response.AddHeader("Content-Disposition", headerValue);
 13:         }
 14:         this.WriteFile(response);
 15:     }
 16: }

ASP.NET MVC定义了三个具体的FileResult,分别是FileContentResult、FilePathResult和FileStreamResult,接下来我们对它们进行单独介绍。

二、FileContentResult

FileContentResult是 针对文件内容创建的FileResult。如下面的代码片断所示,FileContentResult具有一个字节数组类型的只读属性 FileContents表示响应文件的内容,该属性在构造函数中指定。FileContentResult针对文件内容的响应实现也很简单,从如下所示 的WriteFile方法定义可以看出,它只是调用当前HttpResponse的OutputStream属性的Write方法直接将表示文件内容的字 节数组写入响应输出流。

 1: public class FileContentResult : FileResult
 2: {
 3:     public byte[] FileContents { get; }
 4:     public FileContentResult(byte[] fileContents, string contentType) ;
 5:
 6:     protected override void WriteFile(HttpResponseBase response)
 7:     {
 8:         response.OutputStream.Write(this.FileContents, 0, this.FileContents.Length);
 9:     }
 10: }
 11:
 12: public abstract class Controller : ControllerBase, ...
 13: {
 14:     // 其他成员 
 15:     protected FileContentResult File(byte[] fileContents, string contentType);
 16:     protected virtual FileContentResult File(byte[] fileContents, string contentType, string fileDownloadName);
 17: }

抽象类Controller中定义了如上两个File重载根据指定的字节数组、媒体类型和下载文件名(可选)生成相应的 FileContentResult。由于FileContentResult是根据字节数组创建的,当我们需要动态生成响应文件内容(而不是从物理文件 中读取)时,FileContentResult是一个不错的选择。

三、FilePathResult

从名称可以看出,FilePathResult是 一个根据物理文件路径创建FileResult。如下面的代码片断所示,表示响应文件的路径通过只读属性FileName表示,该属性在构造函数中被初始 化。在实现的WriteFile方法中,FilePathResult直接将文件路径作为参数调用当前HttpResponse的 TransmitFile实现了针对文件内容的响应。抽象类Controller同样定义了两个File方法重载来根据文件路径创建相应的 FilePathResult。

 1: public class FilePathResult : FileResult
 2: {
 3:     public string FileName { get; }
 4:     public FilePathResult(string fileName, string contentType);
 5:
 6:     protected override void WriteFile(HttpResponseBase response)
 7:     {
 8:         response.TransmitFile(this.FileName);
 9:     }
 10: }
 11:
 12: public abstract class Controller : ControllerBase, ...
 13: {
 14:     //其他成员
 15:     protected FilePathResult File(string fileName, string contentType);
 16:     protected virtual FilePathResult File(string fileName, string contentType, string fileDownloadName);
 17: }

四、FileStreamResult

FileStreamResult允 许我们通过一个用于读取文件内容的流来创建FileResult。如下面的代码片断所示,读取文件流通过只读属性FileStream表示,该属性在构造 函数中被初始化。在实现的WriteFile方法中,FileStreamResult通过指定的文件流读取文件内容,并最终调用当前 HttpResponse的OutputStream属性的Write方法将读取的内容写入当前HTTP响应的输出流中。抽象类Controller中同 样定义了两个File方法重载根据文件读取流创建相应的FileStreamResult。

 1: public class FileStreamResult : FileResult
 2: {
 3:     public Stream FileStream { get; }
 4:     public FileStreamResult(Stream fileStream, string contentType);
 5:
 6:     protected override void WriteFile(HttpResponseBase response)
 7:     {
 8:         Stream outputStream = response.OutputStream;
 9:         using (this.FileStream)
 10:         {
 11:             byte[] buffer = new byte[0x1000];
 12:             while (true)
 13:             {
 14:                 int count = this.FileStream.Read(buffer, 0, 0x1000);
 15:                 if (count == 0)
 16:                 {
 17:                     return;
 18:                 }
 19:                 outputStream.Write(buffer, 0, count);
 20:             }
 21:         }
 22:     }
 23: }
 24:
 25: public abstract class Controller : ControllerBase, ...
 26: {
 27:     //其他成员
 28:     protected FileStreamResult File(Stream fileStream, string contentType);
 29:     protected virtual FileStreamResult File(Stream fileStream, string contentType, string fileDownloadName);
 30: }

五、实例演示:通过FileResult发布图片

为了让读者对FileResult具有更加深刻地认识,我们通过一个实例来演示如何通过FileResult来对外发布图片。在通过Visual Studio的ASP.NET MVC项目模板创建的空Web应用中,我们在根目录下添加一个名为images的子目录来存放发布的.jpg图片,然后我们定义如下一个 HomeController。

 1: public class HomeController : Controller
 2: {
 3:     public ActionResult Index()
 4:     {
 5:         return View();
 6:     }
 7:
 8:     public ActionResult Image(string id)
 9:     {
 10:         string path = Server.MapPath("/images/" + id + ".jpg");
 11:         return File(path, "image/jpeg");
 12:     }
 13: }

图片的发布体现在Action方法Image上,表示图片ID的参数同时作为图片的文件名(不含扩展名)。在该方法中,我们根据图片ID解析出对应 文件的路径后,直接调用File方法创建一个媒体类型为“image/jpeg”的FilePathResult。在Action方法Index中呈现的 View定义如下,我们通过一个列表显示6张图片。基于图片的<img>元素的src属性指定的地址正是指向定义在 HomeController的Action方法Image,指定的表示图片ID的参数分别是001、002、…、006。

 1: <html>
 2:     <head>
 3:         <title>Gallery</title>
 4:         <style type="text/css">
 5:             li{list-style-type:none; float:left; margin:10px 10px 0px 0px;}
 6:             img{width:100px; height:100px;}
 7:         </style>
 8:     </head>
 9:     <body>
 10:         <ul>
 11:             <li><img alt="001" src="@Url.Action("Image", new { id = "001" })"/></li>
 12:             <li><img alt="002" src="@Url.Action("Image", new { id = "002" })"/></li>
 13:             <li><img alt="003" src="@Url.Action("Image", new { id = "003" })"/></li>
 14:             <li><img alt="004" src="@Url.Action("Image", new { id = "004" })"/></li>
 15:             <li><img alt="005" src="@Url.Action("Image", new { id = "005" })"/></li>
 16:             <li><img alt="006" src="@Url.Action("Image", new { id = "006" })"/></li>
 17:
 18:         </ul>
 19:     </body>
 20: </html>

我们将6张.jpg图片存放到/imges目录下,并分别命名为001、002、…、006。直接运行程序之后这6张图片会以如下图所示的效果显示在浏览器上。

image

了解ASP.NET MVC几种ActionResult的本质:EmptyResult & ContentResult
了解ASP.NET MVC几种ActionResult的本质:FileResult
了解ASP.NET MVC几种ActionResult的本质:JavaScriptResult & JsonResult
了解ASP.NET MVC几种ActionResult的本质:HttpStatusCodeResult & RedirectResult/RedirectToRouteResult

作者:Artech
出处:http://artech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

[转载]AngularJs - Javascript MVC 框架

mikel阅读(1075)

[转载]AngularJs – Javascript MVC 框架 – 破狼 – 博客园.

在6月google发布了AngularJs 1.0稳定版,

并宣称:AngularJS可以让你扩展HTML的语法,以便清晰、简洁地表示应用程序中的组件,并允许将标准的HTML作为你的模板语言,AngularJS可以通过双向数据绑定自动从拥有JavaScript对 象(模型)的UI(视图)中同步数据。

开始接触AngularJs是在4月份来到新项目组,这时AngularJs还处于0.8未稳定版,项目中已经开始使用了,并且这套框架应用到了项目整个 UI端,服务端也是未稳定的web api,真心佩服团队的勇气,对于新技术的热情,幸好大家都能很好的驾驭,这是第一次尝试一个充满未稳定技术的项目。

回到正题,先看一个官方实例:

&nbsp;

&nbsp;

&nbsp;

&nbsp;

Your name: <input type="text" />

<hr />

Hello {{yourname || 'World'}}!

&nbsp;
Demo:
Your name:

Hello {{yourname || ‘World’}}!

注:在输入框中输入任何字符都会立即绑定更新到页面.

  1. 这里采用ng-model指令(directive)绑定是模型scope属性yourname
  2. 并采用表达式将yourname绑定到文本信息中。
  3. 这里只需要任何的dom时间监听,因为AngularJs内置了。

AngularJs程序分为3部分:模板,表现层逻辑,数据(model)。

模板:我们用html,css写的ui视图代码,其中包含AngularJs的指令,表达式,并最终会被AngularJs编译机制编译为附加在dom树上。AngularJs的指令(directive)可以由我们自由扩展。

表现层逻辑:包括应用程序逻辑和行为。用JavaScript定义作为视图控制器逻辑。在AngularJs作为MVC框架,在控制器中我们无需添加对于 dom级的事件监听,这些在AngularJs中已经内置了。在ui节点dom事件发生后AngularJs会自动转到scope上的某个行为 (Action)逻辑。

数据:视图对象(viewobject)需要被AngularJs Scope(1.0中作为service出现)引用,可以使任何类型的JavaScript对象,数组,基本类型,对象。并且AngularJs会自动异 步更新模型,即在ui发生改变的时他会自动刷新模型(mode),反之在模型发生改变的时候也会自动刷新ui。在这里我们不需要定义形如 getter,setter的一些列方法。

下面是一幅来自官方的视图:

同时AngularJs为我们提供了一些列的有用的service,并允许我们添加自己特定业务的服务service,提供了底层的ajax, 缓存, URL 路由, 浏览器抽象服务,以及这些服务我们可以采用AngularJs的注入机制任意组合。同时AngularJs也是一个高度可测试性的javascript框 架,你可以看见在官方的例子中都有带上测试程序,给予BDD(行为驱动)开发框架。

[转载]将时间字符串格式化成DateTime的有趣事情

mikel阅读(1004)

转载将时间字符串格式化成DateTime的有趣事情 – 黄博翔 – 博客园.

最近老大要我将一个dateCalendar控件换成JQuery的datePicker控件,换了之后需要修改cs代码,我在格式化时间的时 候遇到了很有趣的事情,就是,我无论用什么样的方式格式化字符串,它都会添加一个“星期几”进去,例如它会将“2012-08-11 8: 0:00″转换成“2012-08-11 星期六 8: 0:00”。最后这个问题解决了,照成问题的原因有点让我苦笑不得。现在不说照成问题的原因,先说说我在找到原因之前学到的几种格式化时间字符串的方法:

第一种,当然是Convert这个无敌的方法了,这个里面有个方法ToDateTime(string dateTime)。

string dateTime = "2012-08-11 10:11"; Console.WriteLine(Convert.ToDateTime(dateTime));

运行结果:

第二种就是TryParseExact方法,下面是方法介绍(http://msdn.microsoft.com/zh-cn/library/ms131044.aspx):

public static bool TryParseExact(
string s,//要格式化的字符串
string format,//格式化的类型
IFormatProvider provider,//提供"s"的区域性特定格式信息
DateTimeStyles style,//时间样式
out DateTime result//输出值
)

例子:

DateTime output1;
DateTime.TryParseExact("2012-08-11", "yyyy/MM/dd", null, DateTimeStyles.None, out output1);
Console.WriteLine(output1.ToString());
Console.WriteLine("");
Console.WriteLine("");

string dataTime = "2012-08-11 10:01:00";
DateTimeFormatInfo dtFormat = new CultureInfo("en", true).DateTimeFormat;
string[] expectFormats = { "yyyy-MM-dd HH:mm:ss" };
DateTime output;
DateTime.TryParseExact(dataTime,
expectFormats,
null,
DateTimeStyles.AdjustToUniversal,
out output);
Console.WriteLine(output.ToString());

结果(第一个显示不是预期的):

第三种方式是ParseExact方法,下面是方法介绍(http://msdn.microsoft.com/zh-cn/library/w2sa9yss(v=VS.80).aspx):

public static DateTime ParseExact (
string s,//包含要转换的日期和时间的字符串。
string format,//s 的预期格式。
IFormatProvider provider//用于提供有关 s 的区域性特定格式信息。
)

例子:

string temp1 = "2012-08-11";
DateTime dateTemp1 = DateTime.ParseExact(temp1, "yyyy-MM-dd", CultureInfo.CurrentCulture, DateTimeStyles.None);
Console.WriteLine(dateTemp1.ToString());
Console.WriteLine("");
Console.WriteLine("");

string temp2 = "2012-08-11";
DateTimeFormatInfo dtfi = new CultureInfo("zh-CN", false).DateTimeFormat;
DateTime dateTemp3 = DateTime.ParseExact(temp2, "yyyy-MM-dd", dtfi, DateTimeStyles.None) ;
Console.WriteLine(dateTemp3.ToString());
Console.WriteLine("");
Console.WriteLine("");

string[] DateTimeList = {
"yyyy-MM-dd HH:mm:ss",
"yyyy-M-d HH:mm:ss",
"yyyy-M-d H:mm:ss",
"yyyy-M-d H:m:ss",
"yyyy-M-d HH:mm:ss",
"yyyy-M-d HH:m:ss",
};
DateTimeFormatInfo dtFormat1 = new CultureInfo("en-US", true).DateTimeFormat;
DateTime dt = DateTime.ParseExact("2012-08-11 8: 0:00",
DateTimeList,
dtFormat1,
DateTimeStyles.AllowWhiteSpaces
);
Console.WriteLine(dt.ToString());

结果如下:

 

以上的结果是没有星期几的,我现在上图


这是我在修改之前的输出结果,不论使用什么方法都会输出星期六,及时我想语言特定为“en”,”en-US”等等,

后来我发现是因为我自己将WIN7系统的时间格式修改了,手动添加了表示星期几的”dddd”,

我在将”dddd”去掉后,显示就正常了,如下:

 

【注】:目前我没找到一种将字符串转化成DateTime的时候与系统时间格式完全无关的方法,希望知道的可以多多指教,谢谢了!

推荐文章:http://www.cnblogs.com/jxfc2002/articles/885413.html

[原创]解决firefox下div横移定位问题

mikel阅读(1037)

最近项目中发现firefox下的页面出现横移的问题,导致用户体验差

原因是<div>的兼容问题,导致多个<div>在同一行显示

因此需要加入<div style=”clear:both”></div>

clear:both该属性的值指出了不允许有浮动对象的边。

通俗的讲:这段代码的做用是:清除同行元素,不允许其它元素与之在一行内。

我经常用的代码。

<div class="yao">大家好</div>
<div class="yao">我也很好</div>
<div class="clear10"></div>
<div class="yao">大家好</div>

那么.clear10起到的作用就是在清除前两行浮动的影响并且间隔10px的高度。使用下面的

大家好

与前行不在同一行内。

[转载]Web开发札记 之 对 HTTP 304 的理解

mikel阅读(784)

[转载]Web开发札记 之 对 HTTP 304 的理解 @ 不老歌 – 记录与分享.

最近和同事一起看Web的Cache问题,又进一步理解了 HTTP 中的 304 又有了一些了解。 304 的标准解释是:

Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。

如 果客户端在请求一个文件的时候,发现自己缓存的文件有 Last Modified ,那么在请求中会包含 If Modified Since ,这个时间就是缓存文件的 Last Modified 。因此,如果请求中包含 If Modified Since,就说明已经有缓存在客户端。只要判断这个时间和当前请求的文件的修改时间就可以确定是返回 304 还是 200 。对于静态文件,例如:CSS、图片,服务器会自动完成 Last Modified 和 If Modified Since 的比较,完成缓存或者更新。但是对于动态页面,就是动态产生的页面,往往没有包含 Last Modified 信息,这样浏览器、网关等都不会做缓存,也就是在每次请求的时候都完成一个 200 的请求。

因此,对于动态页面做缓存加速,首先要在 Response 的 HTTP Header 中增加 Last Modified 定义,其次根据 Request 中的 If Modified Since 和被请求内容的更新时间来返回 200 或者 304 。虽然在返回 304 的时候已经做了一次数据库查询,但是可以避免接下来更多的数据库查询,并且没有返回页面内容而只是一个 HTTP Header,从而大大的降低带宽的消耗,对于用户的感觉也是提高。

当这些缓存有效的时候,通过 HttpWatch 查看一个请求会得到这样的结果:
第一次访问 200
鼠标点击二次访问 (Cache)
按F5刷新 304
按Ctrl+F5强制刷新 200

如果是这样的就说明缓存真正有效了。以上就是我对 HTTP 304 的一个理解。