Friday, July 31, 2020

人类首次在火星上起飞直升机,为何只能飞5米高?NASA火星

  来源:中国科普博览

  火星作为太阳系中与地球最为相似的行星,一直吸引着各国航天科学家们的目光。今年,又一个火星探测窗口期到来,在阿联酋的希望号与中国的天问一号相继发射升空之后,美国宇航局(NASA)也于7月30日,在卡纳维拉尔角空军基地SCL-41工位发射了毅力号火星车(Perseverance Rover),这也是他们发射的第二辆核动力火星车。

  美国宇航局拥有悠久的火星探测历史,而此次发射的毅力号火星车比它的前辈们多了一个引人注目的装备——一架名叫灵巧号(Ingenuity)的直升机,而这也将是人类第一次在火星上起飞直升机。下面,我们就带大家来了解一下毅力号和它搭载的直升机,以及它们将在火星上开展的工作。

坚毅号火星车折叠起来的样子,图片来源:NASA毅力号火星车折叠起来的样子,图片来源:NASA

  毅力号和它繁重的火星探测任务

  毅力号火星车的本次发射使用了阿特拉斯V 541火箭,作为一个两级火箭,阿特拉斯V 541火箭已经承载了11次火星任务的发射,包括2005年火星勘测轨道飞行器、2011年与2013年的火星探测器以及洞察号的发射等,堪称火星任务的得力助手。

  在阿特拉斯V 541发射升空后50至60分钟后,毅力号与上面级分离,直接进入地火转移轨道。预计在明年2月18日在火星表面着落,着陆区为杰泽罗(Jezero)撞击坑,这里在数十亿年前曾经是一个三角洲,宽度为45公里,与长三角有些类似,是一种冲击盆地,在它的周围还有陡峭的悬崖。

从维京1号轨道飞行器看到的Jezero陨石坑(右下)(图片来源:维基百科)从维京1号轨道飞行器看到的Jezero陨石坑(右下)(图片来源:维基百科)

  毅力号火星车大约会花费213天前往火星,航程为4.97亿公里,在巡航阶段,火星车和降落隔热装置会形成一个整体。从航程上看,毅力号的路程偏远了一些,这是因为航天器上还有一些地方没有彻底灭菌,如果毅力号火星车的轨道直指火星,却不幸出现故障坠毁在火星上,可能污染火星表面。因此毅力号专门搭载了机动发射巡航级推进器,来及时改变自己的轨道。

  毅力号将采用天空起重机技术降落火星,这与它的前辈——好奇号是一样的。整个降落过程大约为7分钟,毅力号的速度将从每小时1.95万公里降至零。下降过程中,前端隔热屏的温度可达到1300摄氏度。

  与好奇号不同的是,美国宇航局设计了一种更先进的测距触发装置来控制毅力号着陆器的降落伞打开时间,这个装置能让毅力号在距离火星表面9至13公里高度时打开降落伞,这时的速度为每秒420米。当速度降低到每秒0.75米时,隔热保护装置的降落伞会被抛弃,同时启动8台可节流的喷射反推发动机。8台反推发动机启动之后,距离地面的高度会降低到20米,此时天空起重机将伸出缆绳,将毅力号送到火星表面。

坚毅号火星车搭载的仪器示意图,图片来源:NASA毅力号火星车搭载的仪器示意图,图片来源:NASA

  好奇号车长为3米左右,重量为1.025吨,毅力号比好奇号增加了126公斤。主要任务是对火星远古时期的宜居性进行评估、寻找火星上的微生物痕迹、收集杰泽罗(Jezero)撞击坑的岩层样本。为此,毅力号配备了长达2米的机械臂,可抓取30公斤的岩石,机械臂顶端有相机、分析仪、凿岩机等,可对钻取的岩层物质进行切割,并且放置在样品管中。因此不难判断,毅力号这次前往火星的任务将非常繁重,而如果这些任务能成功地进行,将为NASA的下一个火星任务打下坚实的基础。

  首次搭载的火星直升机

  毅力号火星车上最引人注目的载荷是一架火星直升机——灵巧号,这架直升机重量仅有1.8公斤,非常小,造价却高达8000万美元。不过它本身值得起这个身价,因为它是人类第一次在火星上部署的直升机,也是第一个地外天体航空器。

坚毅号火星车与直升机合照,图片来源:NASA毅力号火星车与直升机合照,图片来源:NASA

  麻雀虽小五脏俱全,别看这架火星直升机小,它身上的设备可是非常齐全。从整体来看,直升机包括了双旋翼转子系统、太阳能电池板、起落架、还有机身组件等结构。直升机的转子使用了4叶碳纤维叶片制成,直径为1.2米的共轴反转旋翼,转速可达每分钟约2400转。飞行时,机载的无线电系统可以让它在1公里内与火星车保持通信,同时直升机上还装有导航传感器,用来找火星车,以及彩色和黑白的两个摄像头。

  灵巧号的表面结构经过火星大气压力测试,能够在火星零下上百度的环境中完好无损,同时还内置了加热装置,可确保仪器时刻处于工作温度。在没有飞行的时候,灵巧号可停靠在火星车上。由于火星距离地球有4亿多公里,无法通过操纵杆直接操控直升机,灵巧号的起飞、降落需要自主进行,因此NASA还对直升机的算法进行了优化,提高了它的生存能力。

正在测试中的火星直升机,图片来源:NASA正在测试中的火星直升机,图片来源:NASA

  独创性的火星直升机虽然可以自主起飞,但是飞行时间有限,每次飞行时间要被控制在90秒之内,最大上升高度为5米,最远飞行距离为50米,无法飞得更远更高。同时,飞行次数也受限制,大约可以飞行6次,但对于首次登上火星的直升机来说,能有这样表现就已经足够出色了。

  灵巧号的首次试飞将从2021年春季开始,也就是在毅力号降落火星之后的2个半月之后。它的任务目标是首次进行火星大气中的飞行演示,由于火星大气稀薄,密度仅为地球的1%,且引力也只有地球的三分之一,因此在火星大气中飞行要产生升力很难,飞到5米高的地方就已经相当于在地球上的3万米高空飞行。

火星直升机被折叠放入火星车腹部,图片来源:NASA火星直升机被折叠放入火星车腹部,图片来源:NASA

  NASA对这次演示性飞行并没有提出科学探测的要求,只是希望这次积累的技术能够在未来的火星任务中得到应用。比如研制能够在火星大气中长时间飞行的航空器,以扮演机器人侦察机的角色,对前方地形进行勘测,避免火星车,以及未来可能登陆火星的宇航员陷入糟糕的地形中。

  1996年美国就已经发射了第一辆火星车,这辆被命名为探路者号的火星车在1997年抵达火星,当时火星车上也只搭载了3种仪器,科学调查能力有限。相比之下,2003年发射的机遇号和勇气号则取得了更大的成就——它们共同发现了火星曾经有液态水流过的证据,证明火星在数十亿年前曾经有过海洋。

  此后的好奇号火星车的主要任务就变成了调查火星微生物,虽然它在盖尔撞击坑的调查表明火星上可能没有甲烷的生物释放源,但是好奇号也发现了火星岩土中存在1.5%至3%的水分,这也说明火星是可以支持人类殖民生存的。而毅力号将继承前辈们的衣钵,使用更先进的设备,在一个更有可能存在微生物的地区,来寻找火星上存在微生物的证据。希望这些火星探测任务都能有所收获,也相信在几代人的不断地努力下,人类终有一天,能实现移民火星的梦想。

人类首次在火星上起飞直升机,为何只能飞5米高?NASA火星primc易麦cbo所有电商注意!Facebook 推出 shops功能,商家可在FB、INS免费创建在线商店通知!亚马逊开始向多国家收取远程服务增值税!亚马逊差评怎么治?对付恶意差评的攻略土耳其旅行团土耳其旅游团报价土耳其旅游团报价

亚马逊运营中关于各类发票的问题

亚马逊运营中关于各类发票的问题

客户投诉产品非真品,产品实物与描述不符... 然后需要发票审核

遭遇此种情况的卖家,亚马逊绩效团队一般会在通知邮件中提醒申诉时提供采购单据和发票,供应商信息,买家信息,采购的产品品名和数量等。需要注意的是,亚马逊绩效团队要求提供的采购单据和发票(Invoice)是指增值税专用发票。

因为大部分卖家在采购货品时一般都不会要求供应商开具增值税专用发票,所以,此时提供的发票只能按当下的日期开具,发票日期并不影响申诉的结果,但需要注意的是,发票上的品名一定要和店铺里销售的产品一致,同时,发票上的数量必须和你的账户库存量或者FBA发货量匹配。

为什么亚马逊会要求提供copies of invoices or recepts from your

supplier?因为"发票"最能表现出卖家供应商(链)真实性以及产品真实性!

1. 什么样的发票才算真实?收据行不行?

最好是增值税发票,要可以在税务局官网真实可查的。

亚马逊会去税务网站核查,税务部门网站里展示的是和你提供的完全一致才对,所以收据和其他发票PS后再扫描的做法是无效的。

用收据去审核死马当活马医的,记得盖上双方公司公章,这种碰运气的不做讨论。很早以前还有通过的,现在还真没见过能通过的。

2. 发票的税点需要是多少?

这个目前还没遇到问题,17%或者3%的都可以,关键点在上一个问题。

亚马逊运营中关于各类发票的问题

5. 发票上货物清单需要注意什么?

有很多审核是指明了一些ASIN的,那么你的发票上产品名要合理的和这些产品对应起来,最好一眼就可以看出这发票的货就是亚马逊给你指定的ASIN,不要使用笼统的产品名。可以使用ASIN的产品标题开票,最好尾缀带上ASIN。

让审核人员的工作变的越轻松,你通过的机会越大。

用于分类审核的发票,发票上的产品名字务必属于所申请的分类。

亚马逊运营中关于各类发票的问题

7. 发票的开票时间需要注意什么?

很多人其实都是收到审核邮件后去准备发票的,虽然要求的是过去90天或者365天的发票,而你开出来的都是新鲜热乎的。

这个也不是太纠结的事,毕竟存在"账期"这种东西。

当然,由于时差问题,开好票等个几天再发去审核最好。否则开票时间是5月2号,审核人员一看手表才5月1号,这多尴尬?

另外,发票开具时间应当早于产品上架时间,如果实在无法满足的,发票上需要标注是补开。

8. 发票还有其他什么需要注意?

如果开票自己补税点给对方的话,数量多了又心疼钱,单价可以适当减少,毕竟进货单价无法查证,其他似乎就没有了。

9. 我是工厂,怎么提供发票?

肯定不会是自己给自己开票,但是自己工厂做的货,至少也有原材料的进货发票,提供原材料的采购发票过去并说明自己就是工厂(制造商)即可。

亚马逊上类似的审核POA要求提供发票越来越多,如果你正规经营,平时进货的时候增值税票最好可以开一些备用,至少开一部分以备不时之需,临时补风险始终还是存在的。

这也宣告着一部分从1688上采购并无法开票的卖家运营亚马逊的风险值增大,自己找的一些渠道开票或者临时补票的,注意的点上面都写的很清楚了,自己对照即可。

最后要跟大家说的是,对方是一个审核工作人员(活的!),TA每天要处理大量类似的Case,他们的工作都是按照流程和规定来的,所以如果你提供的发票没有"毛病"可挑,或者申诉邮件逻辑合理,方案简单有效,就等于是让对方的审核工作越简单快速,那么你通过的概率自然会很大。

(来源:大宝站外推广)以上内容属作者个人观点,不代表立场!本文经原作者授权转载,转载需经原作者授权同意。

亚马逊运营中关于各类发票的问题3-6个月中阶运营订单处理与业绩表现查询零基础学会亚马逊图片制作eBay运营的四大核心思路案例分析:CPC6大套路总结亚马逊经验小结华东旅游价格华东自由行组团华东自由行组团

Winform ComboBox独立绘制下拉选项的字体颜色

众所周知,cbo1.ForeColor会同时改变cbo1.Text和下拉选项字体颜色。

独立绘制下拉选项字体颜色,ForeColor 只对 cbo1.Text 颜色有效的办法,示例:

private void cb7_DrawItem(object sender, DrawItemEventArgs e){ DrawCboItems(sender, e);}private void cb7_SelectedIndexChanged(object sender, EventArgs e){ SetCboTextColor(sender);}private void SetCboTextColor(object sender){ ComboBox cbx = sender as ComboBox; if (cbx.Text == "+")  cbx.ForeColor = Color.Red; else  cbx.ForeColor = Color.Black;}private void DrawCboItems(object sender, DrawItemEventArgs e){ ComboBox cbo = sender as ComboBox; //初始化字体和背景色 Pen fColor = new Pen(Color.Black); Pen bColor = new Pen(Color.White); switch (e.Index) {
     //下拉选项的索引   case 1:   {   fColor = new Pen(Color.Red);   break;   } } e.Graphics.FillRectangle(bColor.Brush, e.Bounds); e.Graphics.DrawString((string)cbo.Items[e.Index], this.Font, fColor.Brush, e.Bounds);}

 

Winform ComboBox独立绘制下拉选项的字体颜色品牌大学店铺日常运营活动指导亚马逊listing精讲课谷歌Gmail广告,邮件营销利器! 中国品牌,就是硬核!《我是传奇》第二期2017年清明旅游赏花的地方?2017年清明节深圳会下雨吗?清明节深圳天气怎样?2017深圳清明想带孩子去放风筝?

曼联欧冠席位到手考虑战略放弃欧联杯!或用替补参赛,让主力休息_决赛

原标题:曼联欧冠席位到手考虑战略放弃欧联杯!或用替补参赛,让主力休息

凭借英超第三的成绩,曼联已经确保一张下赛季欧冠入场券。8月份,红魔还需参加欧联杯,索尔斯克亚的球队是夺冠热门,但因为赛程缘故,一些主力球员可能在淘汰赛中被轮休,备战下赛季。

英超已经官宣2020/21赛季将在9月12日重燃战火,而欧联杯决赛在8月21日进行,两者只相隔了22天。通常,一个赛季后球员需要至少两周休息,才能彻底恢复,随后至少要经历3个星期的赛季前集训,才能恢复体能。这意味着,22天的时间不够用。

英超计划给参加欧战的球队,包括欧联杯里的曼联、狼队以及欧冠的曼城、切尔西完整一个月的休赛期。这意味着红魔的新赛季最迟可能在9月20日开启,但仍然会比过往的暑假短暂许多。

因此,英国《曼彻斯特晚报》披露,曼联计划在欧联杯淘汰赛早期轮休主力球员。本周,索尔斯克亚已经给所有球员放假,因为16强战次回合主场对奥地利林茨的比赛毫无悬念,首回合曼联客场5-0大获全胜,早已锁定8强一席之地。

不仅如此,在四分之一决赛中,曼联的对手也只是土耳其伊斯坦布尔或者丹麦哥本哈根的胜者,伊斯坦布尔首回合1-0暂时领先。

在老特拉福德与林茨之战,曼联的阵容肯定会有重大轮换。而此战与在德国科隆的四分之一决赛之间,只相隔5天时间。半决赛则在6天后进行,日期是8月16日,曼联如果晋级,可能遭遇狼队、奥林匹亚科斯、塞维利亚或者罗马。而8月21日的决赛,另一半区的头号热门是国际米兰。

本赛季,曼联在欧冠小组赛给过安赫尔·戈麦斯、庄塔西、詹姆斯·加纳、迪肖恩·伯纳德、伊森·莱尔德和迪兰·莱维特等年轻小将首发机会,伊森·加布雷斯、蒂曼尼·梅勒和拉吉·拉马扎尼等年轻球员则替补上阵。

如果无法拿下欧联杯,曼联将在80年代末之后首次连续3年四大皆空,本赛季联赛杯和足总杯,红魔均止步半决赛。欧联杯最多只有4场比赛,而且每场之间的间隔时间还算充裕,但索尔斯克亚对一些主力球员的出场时间太长感到忧虑。

尤其是队长马奎尔和新核布鲁诺·费尔南德斯,他们在英超重启后37天踢了11场比赛,8000万铁卫全勤,算上加时赛和补时,费尔南德斯也打了1046分钟。此外,马夏尔、拉什福德和林德勒夫,同样在最后9轮英超悉数首发。

索尔斯克亚的轮换能力之差遭到了批评,他自己也很清楚费尔南德斯已经疲惫不堪。英超最后一轮赛后,曼联主帅表示是:「今天你们也许看到了一个疲劳的布鲁诺(费尔南德斯),只是自然的想象,因为他踢了太多比赛。你可以看出他的热情,因为他时不时会抱怨一下,有时候,我们必须让他别这么做!」

曼联曾创纪录地连续5场使用相同的先发阵容,虽然对水晶宫和西汉姆之战,马蒂奇和万比萨卡得到了轮休,但主力球员多数时候还必须疲劳作战。英超最后一轮2-0击败莱斯特城时,首发只有一个调整,还是因为卢克·肖受伤赛季报销,因此被小将布兰登·威廉姆斯取而代之。

因此,索尔斯克亚考虑在前两场欧联杯悉数派遣替补上阵,主力球员至多参加半决赛和决赛,视对手而定。

值得一提的是,如果曼联进入欧联杯决赛,卢克·肖将悲剧性地连续第5次错失决赛机会。25岁的英格兰国脚因为断腿无缘2016年足总杯决赛逆转水晶宫夺冠之战,2017年联赛杯对老东家南安普顿时被穆里尼奥弃用,欧联杯决赛则因伤成为「拐杖队」的一员,2018年足总杯决赛不敌切尔西时再度被弃而不用。

但曼联如果下赛季想要争夺英超冠军,或许就需要调低夺取欧联杯的重要性,合理安排主力球员休养生息。因为竞争对手利物浦已经没有杯赛任务,他们可以经历完整的休假充电+季前备战,新赛季可能赢在起跑线上。返回搜狐,查看更多

责任编辑:

曼联欧冠席位到手考虑战略放弃欧联杯!或用替补参赛,让主力休息_决赛进阶管理wish高效运营核心要素bestbuy如何有效预防跟卖和赶走跟卖?除非关税大幅上升,否则苹果供应商将继续在中国生产iPhone?撒10亿金币+豪车金条!Shopee再造马来印尼斋月爆单高峰诺唯真邮轮游组团国庆诺唯真邮轮游价格国庆诺唯真邮轮游价格

【.NET框架】—— ASP.NET MVC5 表单和HTML辅助(二)

1.1.ASP.NET MVC表单的使用

表单<form>是html里面一个非常常用的标签,这里的属性就不过多介绍;

这里主要讲<form>表单在MVC5中的使用及框架辅助BeginForm的使用:

①首先创建一个View层下面的<form>标签,使用正常形式的跳转方式;

<form action="/Home/About" method="get"> <input type="text" name="username" /> <input type="submit" value="搜索" /></form>

上面跳转会到HomeController下面的About方法,传递username参数,并在

@ViewBag.Message上进行显示;

public ActionResult About(string username){ ViewBag.Message = username; return View();}

 

2.1.1.HTML.BeginForm辅助方法

Html.BeginForm方法代替了我们html中的form标签,更好地配合了MVC框架使用,下面用Html.BeginForm方式替换<form>标签,功能和<form>的action进行跳转一致:

语法如下:

Html.BeginForm(“方法”, “mvc控制器名称”, Method)

下面代码与普通<form>标签的执行方式一致:

@using (Html.BeginForm("About", "Home", FormMethod.Get)){ <input type="text" name="username" /> <input type="submit" value="搜索" />}

2.2.ASP.NET MVC表单属性的添加

<form action="/Home/About" method="get" target="_blank"> <input type="text" name="username" /> <input type="submit" value="搜索" /></form><!--使用辅助的方式添加属性target:与上面的target方法相同-->@using (Html.BeginForm("About", "Home", FormMethod.Get, new { target = "_blank" })){ <input type="text" name="username" /> <input type="submit" value="搜索" />}

2.3.HTML.Hidden()方法

使用HTML.Hidden()方法可以隐藏控件,在页面上不进行显示。

语法:@Html.Hidden(“控件名称”, “控件值”)

@using (Html.BeginForm("About", "Home", FormMethod.Get, new { target = "_blank" })){ <!--Html.Hidden:使用隐藏的控件--> @Html.Hidden("h1", "我是隐藏的h1控件"); <input type="text" name="username" /> <input type="submit" value="搜索" />}

 

 

 

2.4.HTML.Lable()和HTML.TextBox()

 <!--Html.Label:Lable文本控件和Html.TextBox:文本框控件--> @Html.Label("lb1", "姓名:") @Html.TextBox("tb1", "")

 

 

 

2.5.HTML.DropDownList()和HTML.ListBox()

①先添加前台界面层DropDownList数据ViewData[“items”]:

 

<div> @Html.Label("lb2", "性别:") @Html.DropDownList("ddl1", ViewData["items"] as List<SelectListItem>, "请选择")</div>

②对应Controller控制器方法Index(),需要注意绑定的数据必须和前台一一对应起来:

public class MyDefineController : Controller{  // GET: MyDefineController01  public ActionResult Index()  {   List<SelectListItem> list = new List<SelectListItem>();   SelectListItem s1 = new SelectListItem();   s1.Text = "男";   s1.Value = "1";   SelectListItem s2 = new SelectListItem();   s2.Text = "女";   s2.Value = "2";   list.Add(s1);   list.Add(s2);   ViewData["items"] = list;   return View();  }}

③启动服务器,显示效果如下:

 

 

 

④同理更改为ListBox,显示界面如下:

@Html.("ddl1", ViewData["items"] as List<SelectListItem>, "请选择")

 

 

 

2.6.HTML.Password()

①HTML.Password()用于创建密码显示框,具体前台设置如下:

<div> <!--Html.Label:Lable文本控件和Html.TextBox:文本框控件--> @Html.Label("lb1", "用户名:") @Html.TextBox("username", "")</div><div> @Html.Label("lb2", "密码:") @Html.Password("password", "")</div>

②Controller层接收请求参数,跳转后展示页面:

public ActionResult About(string username, string password){ ViewBag.Message = "用户名:" + username + ",密码:" + password; return View();}

 

 

 

 

 

 

2.7.HTML.RadioButton()和HTML.CheckBox()

RadioButton表示单选框;CheckBox表示复选框;

具体操作如下:

前台.cshtml界面:

<div> @Html.Label("lb3", "学校:") @Html.RadioButton("rb1", "山东大学")山东大学 @Html.RadioButton("rb1", "清华大学")清华大学 @Html.RadioButton("rb1", "北京大学")北京大学</div><div> @Html.Label("lb3", "爱好:") @Html.CheckBox("cb1", false)足球 @Html.CheckBox("cb2", false)篮球 @Html.CheckBox("cb3", false)乒乓球</div>

后台Contoller参数接收:

public ActionResult About(string username, string password, string rb1, bool cb1, bool cb2, bool cb3)  {   string hobby = string.Empty;   if (cb1)    hobby += "足球 ";   if(cb2)    hobby += "篮球 ";   if (cb3)    hobby += "乒乓球 ";   ViewBag.Message = "用户名:" + username + ",密码:" + password + ",学校:" + rb1 + "爱好:" + hobby;   return View();  }

显示效果如下:

 

 

 

 

 

 

2.8.HTML.ActionLink()和HTML.RouteLink()

Html.ActionLink():主要是替换a标签,使用方法:

@HTML.ActionLink(“链接显示内容”, “方法”, “控制器名称”)

 

Html.RouteLink():主要是设置路由,使用方法:

@HTML.RouteLink(“链接显示”, new{action=”路由”})

具体使用:

<div> @Html.ActionLink("注册", "Contact", "Home") <!--注意:RouteLink指定路由的方式是new { Action = "../Home/Index" }--> @Html.RouteLink("忘记密码", new { Action = "../Home/Index" })</div>

界面显示:

 

 

 

跳转:

 

 

 

 

 

 

2.8.1.URL辅助方法

n  Action方法

n  Content方法

n  RouteUrl方法

Action:与ActionLink非常相似,他返回的是链接地址

Content:可以将相对路径转换为绝对路径

RouteUrl:同样是返回链接地址,接受参数是路由

<div> @Url.Action("Contact", "Home")---- @Url.Content("../Home/Index")---- @Url.RouteUrl(new { Action = "../Home/Index" })</div>

显示效果:

 

 

2.9.Html.Partial()和Html.RenderPartial()

@Html.Partial用于将分部视图渲染为字符串;

使用方式:

@Html.Partial(“视图名称”, Model, ViewDataDictionary)

实例:

①在Test文件夹下新建MVC5 分布页(Razor),

 

 

②在Index.cshtml中可以使用@Html.Partial()

<!--视图引入模型-->@using WebApplication01.Models;@model IEnumerable<Class1>@{ ViewBag.Title = "Index";}@Html.Partial("_PartialPage1", new Class1 { name = "1", value = "小明"}, new ViewDataDictionary() { {"学校", "山东大学" }, { "班级", "大一三班"} });<h2>Index</h2>

③在_PartialPage1.cshtml分布页中设置ViewData字典进行取值:

@model WebApplication01.Models.Class1<div> 姓名 @Model.value 学校 @ViewData["学校"] 班级 @ViewData["班级"]</div>

注意对应的controller中的Index路由方法中View必须和Class1视图Model不能冲突。

@{Html.RenderPartial}将分布视图直接写入响应输出流,所以只能直接放在代码块中,不能放在表达式中(返回值是void);

用法:

@{Html.RenderPartial(视图名称, Model, ViewDataDictionary)}

2.10.ViewBag、ViewData和ViewDataDictionary

①ViewBag和ViewData是已经实例化的对象,可以直接使用。

②ViewDataDictionary是视图字典类。

③ViewBag和ViewData,都是从ViewDataDictionary 实例化而来

④ViewBag是ViewData的动态封装

ViewBag与ViewData的使用:

<div> @ViewBag.name</div><div> @ViewData["name1"]</div>
public class TestController : Controller {  // GET: Test  public ActionResult Index()  {   ViewBag.name = "测试ViewBag";   ViewData["name1"] = "测试ViewData"; //注意这里的name不能重复,否则会覆盖ViewBag的值   return View();  } }

ViewDataDictionary的使用:

@{ ViewBag.Title = "Index"; ViewDataDictionary pairs = new ViewDataDictionary(); pairs.Add("key", "测试ViewDataDic");}<div> @pairs["key"]</div>

2.11.Html.Action()和Html.RenderAction()

① Html.Action()的语法:

n  @Html.Action(“方法”, “控制器”)

示例:

@Html.Action("Contact", "Home", new { name = "老张" })

可以在其它页面View上调用其它Controller上的方法并进行参数传递显示:

 

 

 

 

②Html.RederAction()的语法:

n  @{Html.RenderAction(“方法”, “控制器”)}

和Html.Action()实际结果一致,只是语法不同。

示例:

@{Html.RenderAction("Contact", "Home", new { name = "老张" });}

 

 

2.12.强制类型辅助方法

强制类型辅助方法,主要是用来绑定模型属性的方法。

在普通辅助方法后面加上For就是强制类型辅助方法。

使用方式:

@Html.TextBoxFor(Model -> Model.属性)

 

示例使用:

①在Model层创建一个Stuent类如下:

 public class Student {  //表示可以在前台展示姓名字段  [DisplayName("姓名")]  public string name { get; set; }  [DisplayName("性别")]  public string sex { get; set; }  [DisplayName("年龄")]  public string age { get; set; } }

②在Controller层传递Model,并可以设置属性的值:

public class TestController : Controller {  public ActionResult Contact()  {   //使用Controller路由传递Model Student   var student = new Student();   student.name = "yif";   student.sex = "男";   student.age = 24;   return View(student);  } }

③通过路由跳转到Contact界面.cshtml中,使用LabelFor、TextBoxFor进行数据展示如下图:

<div> @Html.LabelFor(Model => Model.name) @Html.TextBoxFor(Model => Model.name)</div><div> @Html.LabelFor(Model => Model.sex) @Html.TextBoxFor(Model => Model.sex)</div><div> @Html.LabelFor(Model => Model.age) @Html.TextBoxFor(Model => Model.age)</div>

 

【.NET框架】—— ASP.NET MVC5 表单和HTML辅助(二)欧舒丹徐家骏决战亚马逊旺季之巅亚马逊要创建自己的"比特币"改变支付世界?惨过2016!集装箱班轮公司即将进入"半停工"状况!官方|商务部预计1至2月进出口增速将大降2017 五一深圳去哪里好玩?2017年清明旅游赏花的地方?2017年清明节深圳会下雨吗?清明节深圳天气怎样?

所有卖家都需要知道的10个亚马逊销售技巧

所有卖家都需要知道的10个亚马逊销售技巧

在2019年初,亚马逊的53%交易来自第三方卖家。亚马逊正在有超过一百万个卖家, 但最终能够获取成功的卖家没多少。亚马逊是一个受产品知名度和价格驱动的竞争性销售空间。

为了让大家可以在亚马逊出售得成功,今天ShopBase 给大家分享十个在亚马逊出售的技巧

在亚马逊出售得十个技巧

1. 优化产品描述以优化SEO

亚马逊销售超过1200万种产品。 消费者在决定购买之前,必须搜索,查找和比较所有这些产品。

消费者可以按产品属性寻找他们想要购买的产品。

比如,当某些客户寻找女鞋 > 他们有可能寻找平底鞋,凉鞋, 高跟鞋 > 鞋子的颜色如黑色,白色> 鞋子的尺码。

有时候消费者可以搜索长尾词如"用于10英尺VIZIO液晶电视的交流电源线"。

无论哪种方式,消费者都会围绕一些有关他们想要的产品的关键词。 亚马逊卖家面临的挑战是确保你的产品出现在搜索结果页面的顶部。

亚马逊使用你的产品信息和详细信息将客户的搜索词与你的商品相匹配。 因此,你必须像亚马逊提供有关产品的准确信息。

其中包括产品标题,产品详情信息,产品标识符,搜索字词,尺寸,颜色等。请勿略过此类信息。 客户通过这种方式可以找到你的产品,并觉得他们购买的产品就是他们的意愿。

管理你所有的产品信息可能会很麻烦。 有许多由亚马逊提供的如何优化你的产品描述指南。 目前很多卖家选择使用产品信息管理(PIM)应用程序之类的工具来管理其所有产品数据。 当你在多个市场上销售时,此类工具起着重要作用。

2.   使用有竞争力的定价

许多亚马逊消费者有着寻产品最低价格的习惯。卖家需要知道如何设置有竞争力的价格以及如何以具有竞争力的价格列出产品。

如果你不出售独特的商品,请研究出售更你一样产品的其他卖家如何定价。较低的价格可以帮助你的商品显示在搜索结果的顶部。

你可以使用"Amazon's Match Low Price feature -亚马逊的匹配低价功能"来帮助了解该商品在亚马逊的最低价格是多少。 该工具允许你设置自定义,以让你有竞争价格。

3. 拍摄专业产品图片

图片就是影响消费者线上购买行为的重要因素,通过图片他们可以看到他们购买的产品长的怎么样。 卖家应该有对每一种产品拍摄多有高质量的图片以让客户更加了解产品的相关信息。

高质量的产品图片有利于提升客户的信任度。他们会相信你是专业卖家,可为他们提供他们想要购买的物品。

不要忘记通过亚马逊产品指南检查你的产品是否合格。该工具会帮你指定产品图片质量以及产品尺寸应该如何。 你也可以阅读拍摄产品技巧以确保拍出清晰的产品图片

4.尽量占有购买盒(Buy box)

所有卖家都努力占有亚马逊购买盒。购买和有多厉害呢?购买盒就是在产品信息页面显示的

6004.png

因此,赢得购买盒的人通常会看到销售量的增长。

如果你出售的产品有许多人正在卖,这意味着你需要跟他们竞争购买盒。

亚马逊使用绝密算法来确定哪些产品在购买盒中显示,因此赢得购买盒变成非常困难。

尽管我们无法告诉你赢得购买盒的确切步骤,但我们知道低价格,库存可用性,履行选项,卖家评分和积极的客户评论都是赢得购买盒的重要因素。

查看有关如何增加赢得亚马逊购买盒的机会的技巧。

小提示:如果你创建一个独特的商品套餐(例如3种相关的护肤产品),你赢得购买盒的可能性更高。

5. 不断努力提高绩效

你的亚马逊业务不会自己经营。 如果你打算出售大量商品,则需要定期监控效率。 这样,你可以不断改善自己的努力。

注意经常查看你的销售量,它是增加还是减少以及观察退货率和消费者的评价。 所有这些都是你改善效率的重要因素。

6. 考虑使用亚马逊物流.

线上经营的重要因素之一就是如何将你的产品运送到客户手上。如果你没办法运输货物到客户手上,这意味着你的业务不能长久的。而,我也了解这是许多卖家头疼的问题。

你可以自己履行订单,但你可能还需要考虑使用亚马逊物流(FBA)。 亚马逊物流是亚马逊提供的一项服务,亚马逊FBA可帮你履行订单。 通过FBA,你可以为客户提供与亚马逊本身相同水平的履行服务。

但是,亚马逊物流并不适合所有人。 在某些情况下,你可能会发现收费太高而无法发挥其优势。 如果你不确定,请阅读我们的文章,以了解FBA是否值得你承担业务费用。

7. 遵守亚马逊的规则

这应该很容易。 只要遵守规则。

在亚马逊经营,你应该不要走捷径并试图利用亚马逊。 随时了解最新政策也是不错的选择,这样你就不会违反亚马逊的任何规则。

如果你不遵守规则,你的的账号可能被亚马逊禁用。

在此处了解亚马逊的销售政策。

8. 利用产品评论变成你的优势

好评可吸引更多消费者。 差评可能降低消费者的信任度以及销售量。这里最难的问题就是你无法控制其他人如何对你产品评论

这也是为什么消费者在购买任何产品之前都查看产品的评价。

因此通过好评你可以寻找更多客户及提升订单量

增加评论数量的最好方法就是简单地要求客户这样做。

我从亚马逊购买了许多商品,购买后收到卖家要求我给他们产品留下评论的邮箱。 这些类型的电子邮件是与客户进行对话以监控其与你的购买体验的好方法。

这样客户也可以通过邮箱反馈你的产品质量,或者对你产品不满意的一面。

在亚马逊上销售时,客户评价确实可以成就或破坏你的成功。

亚马逊也经常检查网站上的虚假评论。 因此你不要塑造虚假评论免得亚马逊将你的账号禁用.

9. 将客户服务放在首位

客服是线上经营的关键因素。这也是你与客户互动的方式。因此你需确保有足够的客服员能够随时客观解答客户提问

客服对于留住客户并将他们变成你的忠诚客户是至关重要的。 客户喜欢在他们熟悉的店铺购物,但他们也会走到其他地方寻找他们需要的东西。

在亚马逊出售时,你应该即使回答客户的问题,快速处理他们的退货,换货要求。同时,你需要将客户放到第一位。

对于某些公司而言,想要构建一个有效的客服流程可能需要做很多额外的工作。 使用FBA的好处就是亚马逊为你处理退货和客户服务。

因此,如果你在客户这方面没有太多经验可以考虑FBA以减少你企业的工作。

10.主动管理亚马逊库存

在出售任何产品时,你都需要考虑库存问题。可以想象,当你在网上看到某个产品,你想要购买它,在决定购买之前发现该产品已经没有现货了。那时候你会有什么感觉?

因此,需要站在客户角度考虑, 保值你的库存一直有现货。

如果客户下单付款,但你没有现货发送到客户手上,亚马逊会认为你账号存在欺骗行为,因此亚马逊将你账号禁用的可能性会很高。

另外,现货也是决定赢得购买盒的重要因素。亚马逊会查看你的库存正在有多少数量现货,因此亚马逊会帮你最大化收入。

结论

希望大家阅读我们文章之后就可以立刻运用我们分享的十个技巧。

祝大家成功!


来源:ShopBase

查看原文:https://www.ikjzd.com/home/126849

beien:http://www.ikjzd.com/w/1336

2016年中国跨境电商高峰论坛暨鹰熊汇年会:https://www.kjyunke.com/courses/174

Amazon的关键词思路:https://www.kjyunke.com/courses/381

所有卖家都需要知道的10个亚马逊销售技巧

社交障碍的“解药” 或许在大脑皮层下社交

  来源:科技日报

  人在清醒状态下,有高达80%的时间在从事各种形式的社会交往活动。社交是人的基本需求,对于个人的成长和身心不可或缺。然而不幸的是,社交障碍是自闭症、抑郁症、精神分裂症以及社交焦虑症等主要精神疾病的一个高度共有病征,严重危害患者的日常生活和工作。

  近日,浙江大学医学院附属第二医院徐晗教授课题组揭示了前额叶皮层抑制性神经元在社交中的活动规律,并发现了其调控社交行为的神经网络活动机制。这不仅加深了人类对社交行为发生机制的认识,并为自闭症等神经精神疾病患者社交障碍的治疗提供了新思路。该研究在线发表于学术期刊《科学进展》上。

  虽然大脑中抑制性神经元的数量相对较少,仅占全部皮层神经元的10%—20%,但它们的种类繁多。相比在影响社交行为的兴奋性神经元方面取得的研究进展,一直以来科学家对抑制性神经元的作用知之甚少。

  近年来,得益于抑制性神经元类型的转基因小鼠的制备,以及在体多通道记录、光遗传学和药理遗传学等先进实验技术的发展,科研人员才有机会直接记录这些神经元并研究它们在社交行为中的功能。

  "大脑的兴奋性与抑制性就像汽车的油门和刹车,两者在相互配合、相互制衡中,促进人的正常社交。"谈及两种神经元的功能,课题组成员刘玲打了个比方。她介绍说,研究过程中,课题组对小鼠前额叶皮层中PV阳性神经元和SST阳性神经元开展了深入研究。结果发现,在社交行为发生时,小鼠前额叶皮层PV阳性神经元动作电位发放率增加,并在网络水平产生低频伽马振荡活动。

  "单个抑制性神经元可以发放动作电位,而数量众多的神经元群体则可以产生一定频率范围的网络振荡活动,其中低频伽马振荡是指20—50赫兹的网络振荡活动。"徐晗解释道,与此同时,SST阳性神经元动作电位发放率却没有发生显著变化,且抑制这一神经元对社交行为和伽马振荡能量也不会产生影响。

  有趣的是,与PV阳性神经元一样,当课题组以低频伽马频率激活SST阳性神经元时也能够增加低频伽马振荡能量并产生促社交行为效应。这一发现提示,除了PV阳性神经元之外,SST阳性神经元也可作为改善社交障碍的潜在治疗靶点。

  徐晗认为,前额叶皮层抑制性神经元在调控社交行为中,网络低频伽马振荡发挥了重要作用,它好比乐队指挥家的手势,能够有效协同前额叶皮层兴奋性神经元的活动,从而促进社交行为的发生。增加前额叶皮层低频伽马振荡活动可以促进小鼠的社交能力。

社交障碍的"解药" 或许在大脑皮层下社交naver美菜custommade在沉默中爆发?在美国消失后,玩具反斗城或将大力进军亚洲市场!独立站推广工作计划前后台卡、listing图片无法显示,亚马逊美国站出事了?去摩洛哥旅游要多少钱去摩洛哥旅游要多少钱土耳其旅行团

胃食管反流苦不堪言!医生给你2个建议,安全有效果

烧烤、扎啤、麻辣小龙虾......这些都是现代年轻人离不开的食物,与此相对的,患胃病、胃常常不适的人也比比皆是。

在胃部不适中,反酸烧心是比较常见的一种。其实除了不当饮食习惯,还有一些其他原因也会引起反酸烧心的症状。


经常反酸烧心的原因是什么?

胃灼热是导致反酸烧心的常见症状,是因为胃酸对胃粘膜刺激造成的,也有一些患者是因为胆汁反流刺激胃粘膜造成的,这种感觉经常会由胸骨下段慢慢向上延伸,其中胃食管反流是最为常见的,还有一些消化性溃疡患者以及慢性胃炎患者都可能会引起反酸烧心症状。

不良饮食习惯,比如进食太快太多、暴饮暴食甚至是吃一些刺激性食物、刺激性药物等都会使得食管下段的括约肌松弛造成胃酸分泌增多造成。

精神原因也会因为经常反酸烧心,比如长时间焦虑、失眠以及长时间的精神紧张等等。

在引起经常性反酸烧心的原因中,胃食管反流是常见因素,如果不及时进行治疗还会引起更为严重的后果。

胃食管反流有哪些危害?

胃食管反流毕竟是一种身体异常现象,除了烧心反酸还会存在胸骨后疼痛的症状,尤其在餐后更为严重,不管是对夜晚的睡眠质量还是白天的工作效率都会产生极大影响。总而言之,胃食管反流造成的伤害不仅仅是身体方面,还包括精神方面的,很多患者都因此而患上抑郁症

如果胃食管反流没有得到及时治疗,胃酸就会反复腐蚀到食管,会逐渐引起食管中麟状商品出现大肠样化生,会引起食管的癌前病变。也有少量患者食物会反流到口腔以及鼻腔,会引起鼻炎以及鼻息肉等等,当反流到食管则会引起哮喘,还会进一步导致胃部纤维化并造成感染

胃食管反流不管对于患者身体而言还是对于经济状况而言都是一种折磨,有外国学者报道,在不包括日常工作所产生的损失之外,胃食管反流在药物、诊疗以及手术并发症上的治疗在全球是以亿美元为单位计算的。

如何缓解反酸烧心的症状?

经常出现反酸烧心,对患者的确是一种折磨。建议大家不要硬扛,而是选择科学有效的方法来缓解治疗。

首先是服用药物。目前临床上治疗胃食管反流主要是通过质子泵抑制剂进行的,可以帮助抑制胃粘膜壁细胞的质子泵,可以阻止胃酸分泌,多数患者服用药物几天之后症状就可以得到缓解,但是需要长时间服用。

胃食管反流跟患者的饮食以及生活方式密切相关,其根本预防措施是培养良好的饮食习惯,坚持少吃多餐,少吃煎炸的食物,多吃瘦肉以及牛奶制品等等,要遵循清淡的饮食习惯,减少辣椒以及胡椒等刺激性食物的摄入;要戒烟限酒,减少刺激性饮料的摄入;要增加运动量控制体重;对于紧张的情绪一定要选择合适办法进行释放,学会调控情绪这些对胃食管反流都有极大作用。

参考资料:

王其彰.胃食管反流病[J].食管外科电子杂志,2015,v.3(01):32-45.

胃食管反流苦不堪言!医生给你2个建议,安全有效果Wish政策stylenanda官网一天玩转Priceminister平台建议收藏|亚马逊29种开Case路径汇总亚马逊经验小结马云透露2019年跨境电商领域的机会!江西婺源跟团游与自由行怎么去四川九寨沟旅游怎么去四川九寨沟旅游

基于.NetCore3.1系列 —— 日志记录之日志配置揭秘

一、前言

在项目的开发维护阶段,有时候我们关注的问题不仅仅在于功能的实现,甚至需要关注系统发布上线后遇到的问题能否及时的查找并解决。所以我们需要有一个好的解决方案来及时的定位错误的根源并做出正确及时的修复,这样才能不影响系统正常的运行状态。

logging

这个时候我们发现,其实在asp.net core中已经内置了日志系统,并提供了各种内置和第三方日志记录提供程序的日志记录接口,在进行应用开发中,可以进行统一配置,并且利用第三方日志框架相结合,更加有效的实现日志记录。所以在这个系列中,主要是对内置日志记录系统的学习,以及后续使用第三方日志框架集成我们需要的日志系统。

二、说明

在这一篇中主要是对日志记录的配置进行说明,从开始配置日志,以及后续使用配置进行日志处理。

在新建项目成功之后,我们都会看到一个命名为appsettings.json配置,打开一看,短短的几行配置,

 "Logging": { "LogLevel": {  "Default": "Information",  "Microsoft": "Warning",  "Microsoft.Hosting.Lifetime": "Information" } },

然后启动运行的时候,程序会在调试面板和控制台中分别输出显示来源如下:

在控制台中:

logging

在调试面板中:

img

这里的日志配置,在系统中到底都起来什么作用?让我们来一探究竟吧!

三、开始

3.1 默认配置

我们查看源代码发现,在程序的入口点中发现,在初始化时候,通过CreateDefaultBuilder方法来实现日志记录的默认配置。

public class Program{ public static void Main(string[] args) {  CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) =>  Host.CreateDefaultBuilder(args)   .ConfigureWebHostDefaults(webBuilder =>   {    webBuilder.UseStartup<Startup>();   });}

所以下面我们看一下CreateDefaultBuilder在源码中都对日志做了哪些默认配置?

  public static IHostBuilder CreateDefaultBuilder(string[] args)  {   var builder = new HostBuilder();   builder.UseContentRoot(Directory.GetCurrentDirectory());   builder.ConfigureHostConfiguration(config =>   {    config.AddEnvironmentVariables(prefix: "DOTNET_");    if (args != null)    {     config.AddCommandLine(args);    }   });   builder.ConfigureAppConfiguration((hostingContext, config) =>   {    var env = hostingContext.HostingEnvironment;    config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);    if (env.IsDevelopment() && !string.IsNullOrEmpty(env.ApplicationName))    {     var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));     if (appAssembly != null)     {      config.AddUserSecrets(appAssembly, optional: true);     }    }    config.AddEnvironmentVariables();    if (args != null)    {     config.AddCommandLine(args);    }   })   .ConfigureLogging((hostingContext, logging) =>   {    var isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);    if (isWindows)    {     logging.AddFilter<EventLogLoggerProvider>(level => level >= LogLevel.Warning);    } logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));    logging.AddConsole();    logging.AddDebug();    logging.AddEventSourceLogger();    if (isWindows)    {     logging.AddEventLog();    }   })   .UseDefaultServiceProvider((context, options) =>   {    var isDevelopment = context.HostingEnvironment.IsDevelopment();    options.ValidateScopes = isDevelopment;    options.ValidateOnBuild = isDevelopment;   });   return builder;  }

通过上面这一段源码我们可以看到一个命名为ConfigureLogging的对象,我们根据命名的意思大致可以看出,这是一个配置日志的方法,继续查看ConfigureLogging源码

 public static IHostBuilder ConfigureLogging(this IHostBuilder hostBuilder, Action<HostBuilderContext, ILoggingBuilder> configureLogging) {  return hostBuilder.ConfigureServices((context, collection) => collection.AddLogging(builder => configureLogging(context, builder))); }

通过IServiceCollection注册服务集合容器,将日志服务添加到这个服务容器,使用AddLogging方法实现对日志服务的注册。

 public static IServiceCollection AddLogging(this IServiceCollection services, Action<ILoggingBuilder> configure) {  if (services == null)  {   throw new ArgumentNullException(nameof(services));  }  services.AddOptions();  services.TryAdd(ServiceDescriptor.Singleton<ILoggerFactory, LoggerFactory>());  services.TryAdd(ServiceDescriptor.Singleton(typeof(ILogger<>), typeof(Logger<>)));  services.TryAddEnumerable(ServiceDescriptor.Singleton<IConfigureOptions<LoggerFilterOptions>>(   new DefaultLoggerLevelConfigureOptions(LogLevel.Information)));  configure(new LoggingBuilder(services));  return services; }

通过AddLogging添加到服务集合容器,先通过添加所需的配置AddOptions,通过注入的方式实现默认的ILoggerFactory,ILogger ( 这个会在后续的篇章中进行说明),再后通过LoggingBuilder完成日志对象的创建,

public interface ILoggingBuilder{ IServiceCollection Services { get; }}internal class LoggingBuilder : ILoggingBuilder{ public LoggingBuilder(IServiceCollection services) { Services = services; } public IServiceCollection Services { get; }}

对日志系统的配置,用于提供程序的接口,ILoggingBuilder后面可以对该对象进行拓展使用。

通过以上的流程CreateDefaultBuilder方法,实现对预先配置的默认值初始化,因此也发现了其中的ConfigureLogging也是其中要进行默认初始化的值,也就是系统默认的日志配置。

单独把ConfigureLogging这一块的源码拎出来再看看:

  .ConfigureLogging((hostingContext, logging) =>  {   var isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);   if (isWindows)   {    logging.AddFilter<EventLogLoggerProvider>(level => level >= LogLevel.Warning);   }   logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));   logging.AddConsole();   logging.AddDebug();   logging.AddEventSourceLogger();   if (isWindows)   {    logging.AddEventLog();   }  })

在asp.net core启动中,根据操作系统平台适应不同的服务,在windows服务中,将EventLogLoggerProvider的默认值设置为警告或者更高的级别。

AddConfiguration : 添加系统日志的全局配置。

在配置中,可以根据提供的不同类型程序来针对实现日志记录的输出方式。而这里默认实现的AddConsole()AddDebug() 和AddEventSourceLogger()分别是将日志输出到控制台、调试窗口中,以及提供写入事件源。

AddConsole : 添加控制台到工厂方法中,用来将日志记录到控制台中。

AddDebug : 添加Debug窗口到工厂方法中,用来将日志记录到窗口中。

说明:asp.net core 内置的日志接口中,实现了多种内置的日志提供器,除了上面默认实现的ConsoleDebugEventSource,还包括下面的这几个

EventLog :

TraceSource

AzureAppServicesFile

AzureAppServicesBlob

ApplicationInsights

还记得上面提到的appsettings.json配置吗?在这里,我们来看看

{ "Logging": { "LogLevel": {  "Default": "Debug",  "Microsoft": "Information" }, "Console": {  "LogLevel": {  "Default": "Debug",  "System": "Warning"  } } }}

AddConfiguration中,

logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));

获取配置文件的Logging数据,实现全局配置,

  public static ILoggingBuilder AddConfiguration(this ILoggingBuilder builder, IConfiguration configuration)  {   builder.AddConfiguration();   builder.Services.AddSingleton<IConfigureOptions<LoggerFilterOptions>>(new LoggerFilterConfigureOptions(configuration));   builder.Services.AddSingleton<IOptionsChangeTokenSource<LoggerFilterOptions>>(new ConfigurationChangeTokenSource<LoggerFilterOptions>(configuration));   builder.Services.AddSingleton(new LoggingConfiguration(configuration));   return builder;  }internal class LoggerFilterConfigureOptions : IConfigureOptions<LoggerFilterOptions>{ private const string LogLevelKey = "LogLevel"; private const string DefaultCategory = "Default"; private readonly IConfiguration _configuration; public LoggerFilterConfigureOptions(IConfiguration configuration) {  _configuration = configuration; } public void Configure(LoggerFilterOptions options) {  LoadDefaultConfigValues(options); } private void LoadDefaultConfigValues(LoggerFilterOptions options) {  if (_configuration == null)  {   return;  }  options.CaptureScopes = _configuration.GetValue(nameof(options.CaptureScopes), options.CaptureScopes);  foreach (var configurationSection in _configuration.GetChildren())  {   if (configurationSection.Key.Equals(LogLevelKey, StringComparison.OrdinalIgnoreCase))   {    // Load global category defaults    LoadRules(options, configurationSection, null);   }   else   {    var logLevelSection = configurationSection.GetSection(LogLevelKey);    if (logLevelSection != null)    {     // Load logger specific rules     var logger = configurationSection.Key;     LoadRules(options, logLevelSection, logger);    }   }  } } private void LoadRules(LoggerFilterOptions options, IConfigurationSection configurationSection, string logger) {  foreach (var section in configurationSection.AsEnumerable(true))  {   if (TryGetSwitch(section.Value, out var level))   {    var category = section.Key;    if (category.Equals(DefaultCategory, StringComparison.OrdinalIgnoreCase))    {     category = null;    }    var newRule = new LoggerFilterRule(logger, category, level, null);    options.Rules.Add(newRule);   }  } }}

以上是AddConfiguration实现的整体流程源码,默认注册实现LoggerFilterConfigureOptions对配置数据的读取,其中定义的 LogLevelKey = "LogLevel"DefaultCategory = "Default" 默认字符串,以此来获取默认全局配置数据。

在默认配置的文本格式appsettings.json中,Logging属性可以具有LogLevel和日志提供程序属性。Logging 下的 LogLevel 属性指定了用于记录所选类别的最低级别。在本例中, Microsoft 类别在 Information 级别记录,其他均在 Debug 级别记录。

日志级别说明:每一个日志都有指定的日志级别值,日志级别判断指示严重性或重要性。使用日志等级可以很好的过滤想要的日志,记录日志记录问题的同时,甚至为我们提供非常详细的日志信息。

LogLevel 严重性:Trace < Debug < Information < Warning < Error < Critical < None。

日志级别常用场景
Trace = 0记录一些对程序员调试问题有帮助的信息, 其中可能包含一些敏感信息, 所以应该避免在 生产环境中启用Trace日志,因此不应该用于生产环境。默认应禁用。
Debug = 1记录一些在开发和调试阶段有用的短时变 量(Short-term usefulness), 所以除非为了临时排除生产环境的 故障,开发人员应该尽量避免在生产环境中启用Debug日志,默认情况下这是最详细的日志。
Information = 2记录跟踪应用程序的一些流程, 例如,记录当前api请求的url。
Warning = 3记录应用程序中发生出现错误或其它导致程序停止的流程异常信息。 这些信息中可能包含错误消息或者错误产生的条件, 可供后续调查,例如, 文件未找到
Error = 4记录应用程序中某个操作产生的错误和异常信息。这些消息应该指明当前活动或操作(比如当前的 HTTP 请求),而不是应用程序范围的故障。
Critical = 5记录一些需要立刻修复,急需被关注的问题,应当记录关键级别的日志。例如数据丢失,磁盘空间不足等。

日志级别只需要简单的通过 AddFilter 对日志的过滤级别配置一下就行了。同时也可以通过自定义在

Logging.{providername}.LogLevel 中指定了级别,则这些级别将重写 Logging.LogLevel 中设置的所有内容。(在下文自定义中说明)

由此可以看出,日志记录提供程序配置由一个或多个配置提供程序提供,如文件格式(系统自带的appsettings.json)或者通过(已安装或已创建的)自定义提供程序(下文会说明自定义方式)。

3.2 自定义配置

看完了上面实现的默认配置之后,我们也清楚了可以修改默认配置实现不同等级日志的输出,因此,我们也可以通过自定义的方式,对默认配置的修改,实现我们想要的日志记录方式。

可以通过自行选择添加提供程序来替换默认配置的提供的程序。这样就实现自定义。自定义的方式有很多,比如

3.2.1 代码添加提供程序

调用ClearProviders,清除默认之后,可添加所需的提供程序。如下:

 public static IHostBuilder CreateHostBuilder(string[] args) =>  Host.CreateDefaultBuilder(args) //可以看出在使用模板创建项目的时候,默认添加了控制台和调试日志组件,并从appsettings.json中读取配置。  .ConfigureLogging((hostingContext, logging) =>  {   logging.ClearProviders(); //去掉默认添加的日志提供程序   //添加控制台输出   logging.AddConsole();   //添加调试输出   logging.AddDebug();  })  .ConfigureWebHostDefaults(webBuilder =>  {    webBuilder.UseStartup<Startup>();  });}

由上可以发现我们可以通过在入口程序中直接对添加ConfigureLogging(在上文中源码可以看出)拓展方法来实现我们的自定义配置。

3.2.2 代码添加过滤器

过滤器AddFilter,添加过滤规则,可以为不同的日志提供者指定不同的过滤器,实现有效的自定义日志的输出。如下代码:

.ConfigureLogging(logging => logging.AddFilter("System", LogLevel.Debug)   .AddFilter<DebugLoggerProvider>("Microsoft", LogLevel.Trace))

添加指定了全局的过滤器,作用于所有日志提供者,示例中的第二个 AddFilter 使用类型名称来指定调试提供程序。 第一个 AddFilter 应用于全部提供程序,因为它未指定提供程序类型。

这里的AddFilter其实于之前读取配置文件信息添加配置AddConfiguration的作用相似,只是从配置文件的逻辑改成了以代码的方式实现过滤筛选,到最终也是对ConfigureOptions 的配置。

3.2.3 配置文件自定义

ASP.NET Core默认会从appSetting.json中的Logging属性读取日志的配置(当然你也可以从其他文件中读取配置),这里设置了不同的日志提供器产生的最低的日志级别,配置样例如下。

{ "Logging": { "Debug": {  "LogLevel": {  "Default": "Information"  } }, "Console": {  "LogLevel": {  "Microsoft.AspNetCore.Mvc.Razor.Internal": "Warning",  "Microsoft.AspNetCore.Mvc.Razor.Razor": "Debug",  "Microsoft.AspNetCore.Mvc.Razor": "Error",  "Default": "Information"  } }, "LogLevel": {  "Default": "Debug" } }}

此 JSON 将创建 6 条筛选规则:Debug中1 条用于调试提供程序,Console中 4 条用于控制台提供程序,最后一条LogLevel 用于所有提供程序。 创建 ILogger 对象时,为每个提供程序选择一个规则。

四、问题

虽然在这一节中只是对日志记录的配置进行了说明,但是在后续中也会对日志内部的核心运行机制进行说明介绍。所以,在这一篇中留下几个疑问

  1. 日志记录的输出可以在哪里查看?而又由什么实现决定的呢?
  2. 如何管理输出不同的日志呢?都有哪些方式呢?

以上的这些内容,会在下一篇进行介绍说明。

好了,今天的日志配置内容就说到这里了,希望能给大家在使用Core开发项目中对日志系统有进一步的认识。

五、总结

  1. 本篇主要是对net core3.1中内置的系统日志进行配置使用,不管是基于默认配置的输出方式,还是自定义形式的配置,都是为了有效的输出日志记录,便于我们查找发现问题。
  2. 关于日志配置,其实都是在对ConfigureOptions的配置,只是在形式上是直接读取配置文件或通过代码的方式实现自定义来实现日志配置。
  3. 后续会对内置的日志系统进一步说明,以及内部运行的主要核心机制。
  4. 如果有不对的或不理解的地方,希望大家可以多多指正,提出问题,一起讨论,不断学习,共同进步。
  5. 官方源码 和 参考资料
基于.NetCore3.1系列 —— 日志记录之日志配置揭秘曾德威亚马逊中级运营实操拉美和非洲跨境电商平台Linio&Jumia卖家见面会被跟卖了,卖家怎么维权亚马逊卖家各类支持渠道联系方式汇总跨境电商新手选品简介:可从亚马逊入手了解2017年深圳动漫展举办地点定在哪里呢?2017五一去大小梅沙露营天气怎么样?带什么衣服去?2017年五一深圳什么地方最适合旅游?深圳金沙湾怎么样?

给毛囊补充一次“营养”细胞,就能恢复90%的脱发区域脱发

  来源:生物探索

  对于当代青年人来说,最难受的莫过于年纪轻轻就"没"了头发。据统计,在中国,大约2.5亿人深受脱发困扰,平均六个人当中就有一个人存在脱发症状,并且脱发现象日趋低龄化。尽管米诺地尔和非那雄胺是治疗脱发的"黄金准则",植发也能在一定程度上改善人们的"窘况",但是前者疗效不佳,而后者则无异于拆东墙补西墙,甚至还可能让本就不"富裕"的头顶雪上加霜。

  当地时间7月24日,Science Advances发布的一篇研究报告从细胞治疗方面揭示了一种理想的治脱生发方法。北卡罗莱纳州立大学的研究人员发现,给小鼠毛囊补充一种调节基因表达的小分子(miRNA),不仅能够刺激毛发生长,而且在治疗15天后就能够恢复脱发区90%的毛发。

DOI:10.1126/sciadv.aba1685DOI:10.1126/sciadv.aba1685

  "养分"给的对,毛发长得好

  头发生长可分为活跃期、静止期和休眠期三个阶段,而真皮乳头(DP)细胞则是毛发生长的"营养剂",能够调节整个毛囊生长周期,促进毛发生长。

  2011年发表在J。 Clin。 Invest的一篇文章指出,当头发进入静止期时,DP细胞就会脱落,毛囊将收缩并保留在脱发区域。因此,给毛囊补充"营养"将能够诱导头发再生。

  关键在于,如何补充DP细胞?先前的研究表明,通过二维(2D)和三维(3D)培养环境得到的DP细胞具备不同的诱导生发能力。因此,在这项实验中,研究人员让小鼠背部毛发脱落并使毛囊进入静止期,从而验证不同环境下培养的DP细胞在促进毛发再生方面的能力。结果表明,3D培养更有利于重建细胞的自然微环境,从而提高DP细胞进入毛囊后的保留率和存活率。

  恢复90%的毛发,疗效优于米诺地尔

  随后,研究人员以米诺地尔治疗(每日涂抹)为参照,仅对小鼠背部的一侧进行体外培养DP细胞治疗(一次性注射足够剂量)。结果显示,3D培养得到的DP细胞(3D-DP细胞)不仅能够高度改善治疗面的毛发状况,而且可以促进未治疗区域的毛发生长。

  在为期20天的实验中,经过3D-DP细胞处理的小鼠,在15天时整个背部已恢复了90%的毛发覆盖率。相比之下,米诺地尔组在给药侧显示35%的毛发覆盖率,未给药区域毛发覆盖率仅为10%。

不同小鼠背部毛发生长情况不同小鼠背部毛发生长情况

  miR-218-5p是生发关键

  同样是DP细胞,为什么3D培养更能发挥其激活毛囊、促进毛发生长的能力?

  为了探究其中的原因,研究人员分离并检测了通过两种不同培养方法得到的DP细胞的外泌体,发现与2D培养相比,3D-DP细胞的miR-218-5p上调了25倍,说明这种miRNA在调节卵泡再生途径中起着至关重要的作用。

  于是,研究人员对小鼠进行了体内研究,在其背部一侧施用3D-DP细胞的外泌体,另一侧涂抹5%米诺地尔搽剂,结果显示,外泌体的疗效可与DP细胞治疗相媲美。这一发现在进一步研究中得到了验证,miR-218-5p模拟物可显着改善头发再生情况,而其抑制剂则会导致毛囊失去功能。

  该报告的第一作者、北卡罗莱纳州立大学教堂山分校生物医学工程系程柯教授说:"使用3D细胞的细胞疗法可能是一种有效的脱发治疗方法,但必须将这些细胞注射到相应区域并使之生长和扩展。当然,或许我们也可以创造出一种效果相似且副作用小、方便快捷的乳液或膏状物质,这是我们今后研究的重点。"

给毛囊补充一次"营养"细胞,就能恢复90%的脱发区域脱发SellerLabs培训视频杨帆声网agora喜报!深圳市前海必胜道荣获"2019优秀跨境电商软件服务商"已被摧毁!跨境电商"云集品"竟成传销犯罪团伙申诉模板范文10篇 中英文对照版摩洛哥旅游报团价格摩洛哥旅游报团价格去摩洛哥旅游要多少钱

Q4空运价格波动可能重演,跨境卖家该如何备好功课?

2020年新冠疫情的突然爆发,给跨境电商带来了很多不确定因素,进入下半年,海外疫情发展形势如何,成为大家关注的焦点,也是未来安排经营计划的关键考虑因素。

纵腾集团坚持跟踪海外权威数据发现,上半年疫情发展快,各国重视程度高,疫情轨迹呈现过山车般的发展轨迹,一旦翻过"山顶",基本就可以稳定下滑,对未来4-6周的预测可靠性高。

(点击图片可查看大图)

进入疫情下半场,各国的疫情相继出现不同程度的反弹,各国呈现出跟第一波不尽相同的反弹曲线, 本期《纵腾观察》根据海外权威机构提供的数据,通过了解不同国家和地区的疫情预测趋势,提供独家见解,希望卖家未雨绸缪,积极布局,冷静应对错综复杂的状况。

声明:以下数据仅供参考,不构成决策建议。

我们从三月中旬长期跟踪美国华盛顿大学卫生计量与评估研究所(Institute for Health Metrics and Evaluation,简称"IHME")数据预测,该模型更新及时,预测准确性高,对医疗资源需求程度和感染人数、死亡人数开展预测和统计,非常具参考性,欧美等国政要的很多政策宣誓、调整都跟该机构的研究成果相关。比如之前特朗普预测死亡人数超过10万,英国的群体免疫政策被否定,都是来自医疗专业研究机构的专业成果。

值得关注的是,7月初,IHME首次在预测中加入了戴口罩情况下的发展态势预测,结论是戴口罩可以大幅度让感染人数趋于平缓,而放松管制将造成疫情较大规模的反弹。这个结论说明欧美医学界开始在戴口罩防止疫情传播方面达成比较统一的结论,按照以往规律,政府后续一般会采纳专业意见。所以我们很快从新闻里看到特朗普戴起了口罩,欧洲各国和美国各州对戴口罩硬性要求也越来越多。所以未来半年,戴口罩成为接替隔离令的主要管制措施将是大概率的事件,如果能够顺利实施,欧美疫情将朝着有利的方向发展,反之,按照预测模型则非常麻烦。

美国:美东基本趋稳,关注美西、美南

(放松警惕下美国预计感染情况变化图)

IHME提供的预测数据有两条线,红色代表放松管制(Mandateseasing)情况下,疫情可能造成的感染人数,绿色代表戴好口罩(Universal Masks)情况下疫情的走势。8月至11月,如果疫情没有得到严加控制,美南,美西疫情感染人数情况可能会加剧(颜色越深,人口感染率越高)。而美国东部特别是3月疫情高发的纽约、新泽西等地则是没有差异的平缓。

得克萨斯(南部):不容乐观

俄克拉何马(南部):警惕反弹

加利福尼亚(西部):不容乐观

内华达(西部):警惕反弹

犹他州(西部):警惕反弹

华盛顿(西北):警惕反弹

堪萨斯州(中部):基本平稳

密苏里州(中部):基本平稳

纽约(东北):基本控制

宾夕法尼亚州(东北):基本控制

佐治亚州(东南):不容乐观

佛罗里达(东南):不容乐观

根据其他媒体资料,纽约市在新冠疫情初期最严重的时候,非洲裔和亚裔两个少数族裔男性的阳性率达到了72.1%和71.6%,全市五大区中,阳性率最高的是皇后区,高达68%。估计与该地区某种程度上实现了群体免疫有关。

总体上美东地区表现可能会好于美西、美南。届时海外仓备货可以尽量发往美东(北),避免疫情再次上升导致损失。

欧洲:警惕部分国家疫情反弹

(放松警惕下欧洲预计感染情况变化图)

从IHME对欧洲地区的疫情预测情况来看,Q3、Q4季度欧洲地区疫情可能会反弹,葡萄牙、西班牙、波黑、塞尔维亚、罗马尼亚等国家疫情形势需要引起卖家注意。

葡萄牙:警惕9月反弹

西班牙:10月有所抬头

法国:基本平稳,警惕10月反弹

英国:基本平稳,警惕10月反弹

德国:基本平稳,警惕10-11月

意大利:基本平稳,警惕10-11月

捷克:基本平稳

瑞典:基本控制

罗马尼亚:可能进入高发期

英国、法国、德国、意大利、捷克、瑞典等国家在放松管控情况下,疫情在Q3总体平稳,到Q4前后有不同程度的反弹。

全球:海外疫情形势不容客观

(放松警惕下全球预计感染情况变化图)

研究数据显示,从全球范围来看,2020年下半年南半球从冬季迈入春季,气温逐渐升高,南半球疫情逐渐越过高发期,但依然要引起重视。

墨西哥:不容乐观

巴西:管控至关重要

秘鲁:越过高峰期

摩洛哥:警惕抬头

埃及:警惕抬头

土耳其:警惕抬头

俄罗斯:注意管控

印度尼西亚:不容乐观

澳大利亚:警惕反弹

值得注意的是,非洲地区如摩洛哥、利比亚、埃及、肯尼亚等地疫情可能会有所抬头。亚洲地区俄罗斯、孟加拉、印度尼西亚等国家的疫情,不容放松。

卖家:抓住Q3窗口期,Q4或有波动

紧盯疫情发展趋势,才能有所预见。我们在4月中谷仓内部客户分享会上提醒大卖家疫情过了山顶,可以抓紧时间备货,提早备货海外仓,目前看来及时行动的卖家是受益的。后续Q3疫情虽有反弹,但总体处于平稳阶段,Q4形势还需密切观察口罩禁令能否实施成功。而下半年,美国消费市场得益于美元放水带来的相对繁荣,渠道上更多依赖线上购物,导致电商物流运输和派送问题,依然是摆在卖家面前的拦路虎,对跨境电商卖家而言,密切关注疫情走势,提前做好预案,是2020年下半年的必备功课。

6.18在跨境眼的闭门会议上,我们针对疫情下半场,给出的建议是:

1、抓住Q3相对平稳的窗口期,提前备货到海外。

2、Q4海外仓扮演着更重要的角色,卖家需要多站点分散库存,避免过度集中。

3、疫情冲击下,物流总体价格保持相对高位,Q4空运价格波动可能重演,需要早做准备。

结语:疫情虽然给跨境电商行业受到了不小的冲击,但长期来看,行业仍将保持增长活力。根据环境变化,灵活、及时调整策略,方能所向披靡。

来源:纵腾集团

Q4空运价格波动可能重演,跨境卖家该如何备好功课?出口易线下沙龙亚马逊应用商店亚马逊变体/ASIN违规怎么申诉?你想了解的都在这里!亚马逊sfp又有新优惠活动,新加入卖家可享受100%佣金折扣外贸收款方式有哪些?外贸最全收款方式全记录(收藏版) !香港旅游团新疆庐山游价格庐山游价格