Friday, 31 March 2017
Thursday, 30 March 2017
Wednesday, 29 March 2017
html family-font, links, border,
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>
more css
</title>
<style>
p{color:#dd613d;}
th{color:#dd613d;}
h2{color:#dd613d;}
a:link{color:#00ff00; text-decoration:none;}
a:visited{color:#009900; text-decoration:none;}
a:hover{color:#ffff00; text-decoration:none;}
a:active{color:#ff9900; font-size:110%;}
</style>
</head>
<body style="background-image:url('image/nebular.jpg'); background-repeat:repeat-y; background-size:cover">
<h2 style="color:#dd613d; ">Google Earth</h2>
<img src="image/logo.png" alt="google earth icon" height="50" />
<br/>
<a href="https://www.google.ca/" target="_blank">Google</a>
<p style="border:2px dotted #00ff00;margin-left:10px; padding:20px; font-family:Comic Sans MS, cursive, sans-serif;">Use Google Earth on the desktop to travel anywhere without leaving your desk. For additional advanced tools, use Google Earth Pro for no extra charge.</p>
<table border="1">
<thead>
<tr>
<th>Moon</th>
<th>Mars</th>
<th>Sky</th>
<th>Ocean</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<img src="https://www.google.com/earth/images/products_hl_moon.png" alt="moon"/>
</td>
<td>
<img src="https://www.google.com/earth/images/products_hl_mars.png" alt="mars"/>
</td>
<td>
<img src="https://www.google.com/earth/images/products_hl_sky.png" alt="sky"/>
</td>
<td>
<img src="https://www.google.com/earth/images/products_hl_ocean.jpg" alt="ocean"/>
</td>
</tr>
</tbody>
</table>
<p style="text-align:right; font-size:200%">nebular right footer</p>
</body>
</html>
Tuesday, 28 March 2017
add html to blog
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
a:link {
color: #ff9900;
text-decoration: none;
}
a:visited {
color: #ff9900;
text-decoration: none;
}
a:hover {
color: #faf75c;
text-decoration: none;
}
a:active {
color: #faf75c;
font-size: 110%;
}
</style>
</head>
<body>
<div style="color:#33cc33; border:2px dotted #33cc33;width:658px; margin-left:10px; padding:20px; font-family:Comic Sans MS, cursive, sans-serif;">
<h3>
Chuanshuoge, Calgary, Canada, Earth, Solar system, Milky Way Galaxy
</h3>
<h2>
<a href="http://chuanshuoge2.blogspot.ca" target="_blank"><sub>Chuan</sub>Shuo<sup>Ge</sup> - <sub>传</sub>说<sup>哥</sup></a>
</h2>
</div>
<br/>
<img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsTWUDul5K6Pt9yEB7CyZ82QCh32DykL7qIXE_oWmQagoVVf91V-6OqEnpOlB1fEdaue222Z-24RSEyZyNBxryMqPY3GvF3nw6vj30rugbpKFNSqMv4kTeSMBGFFdMSBBJzRA6sWfmhdo/s1600/www.GIFCreator.me_pxVfpz.gif"; alt="Location"/>
</body>
</html>
-----------------------------------------------------
//startup.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace WebApplication1
{
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseDefaultFiles();
app.UseStaticFiles();
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
}
}
screen shot program
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private int picnum = 1;
private void timer1_Tick(object sender, EventArgs e)
{
//Rectangle bounds = this.Bounds;
//Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height);
Bitmap bitmap = new Bitmap(640, 320);
Graphics g = Graphics.FromImage(bitmap);
//g.CopyFromScreen(left corner, Point.Empty, new Size(640,320));
g.CopyFromScreen(new Point(852, 230), Point.Empty, new Size(640,320));
bitmap.Save("test" + picnum + ".jpg");
picnum++;
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
}
private void button2_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
textBox1.Text= Cursor.Position.X.ToString();
textBox2.Text= Cursor.Position.Y.ToString();
}
}
}
http://blogger-hints-and-tips.blogspot.ca/2010/10/putting-html-code-from-third-party-into.html
http://www.talkingdotnet.com/make-index-html-startup-file-in-aspnet-core/
https://ezgif.com/maker
http://gifcreator.me/
Sunday, 26 March 2017
Saturday, 25 March 2017
加拿大做房东必须知道的常识!
从统计数字看,房东和租客发生纠纷的比例可不小。文化差异、经济地位不同、处理方式的偏差等等原因,使得租务纠纷接连不断。更有一个深层的原因,那就是目前的Residential Tenancies Act, 2006(以下简称“民租法”),对租客的过分保护,更使得房东,也就是物业投资人的经营环境不那么宽松。那么如何在现有的管理法规内保证房东的合法权益,同时保护房产的正常维护至关重要。
出租中的房子我想进去检查,看看房子是否被损坏,可以吗?
加拿大的法律重视个人隐私。您一旦出租了物业给租客,您就失去了对物业的使用权。所以,租客无论把单元弄的多脏乱差,只要未造成实际损害,您均无权过问。除非共管物业管理公司和邻居向您投诉,才需要你去通知租客进去检查。有的房东朋友说“她把我的房子住的多脏多乱”,我不得不提醒您,那里暂时不是您的房子。所以,进入出租物业务必遵守民租法的进入要求。以上情况下房东合法进入:
如果房东有证据显示有紧急情况发生,比如严重的漏水等非正常情况发生需要马上处理,可以不用通知租客直接进到房子里;
房东确信租客放弃居住、已经搬离了,可以不通知直接进入;
如果房东需要对房子做一些正常维护、检查、为后一任租客展示、贷款需求等,需要24小时提前通知租客,通知必须是书面的。
民租法的规定非常细致,这里是链接供您查阅。
http://www.servicealberta.ca/pdf/tipsheets/InFORMation_for_landlords.pdf
在签约时,我多收他几个月的房租,可以吗?
民租法允许房东在租用开始时收取第一个月的房租,和不多于月租的押金。此外,民租法还允许房东收取“合理的”钥匙及开门器的押金,押金金额和市场重新制造钥匙和开门器的金额大致相等。可见,民租法不允许收取任何超过这些押金的钱。所谓的“损害赔偿抵押金”、“提前退租抵押金”、“额外住客抵押金”等等,即使租约中双方完全认可同意,民租法也都不允许。如果一旦被告诉,管理局会要求您及时退回,并可能罚款。顺便说一下,任何租约中与民租法有抵触的条款,都是无效条款。民租法对民用租务有最终的管辖权。
我只出租房子里的一个房间,租客和家人一起使用卫生间和厨房。如果日后我这个租客发生纠纷,怎么办?
如果您或您的子女、父母,或者您配偶的子女或父母,一定要和租客共同使用厨房或者卫生间,一旦发生纠纷,房东房客管理局不受理纠纷告诉。做为房东,您应该及时到附近的警察局投诉,将情形告诉给警察,警察在核实“共用”事实后,往往会按“私闯物业法”处理租客。这是民租法的第五条第i款的规定。
一年的租约,刚刚过去三个月,租客就要提前搬走,我能得到些补偿吗?
事实上,您的确面临租客违约。所以,从某种意义上说,您有权寻求损害赔偿。从表面上看,租客应该付清余下的九个月租金,才能离开。但是在实际业务中,这样缴清余款净身出户的租客太少见了。您无法阻拦租客离开,但是您有地位在法院提起诉讼,一般是在小额法庭。您在证明您的损失时,要有租客搬迁后的新地址,以便送达起诉书,您还会要证明您“完全使用了合理的手段,对损失进行了及时的补救”,但仍然形成损失,凭借证据,寻求法官给出合理判决。
我和租客签了一年的租约,刚刚过去三个月,租客没有过错,我就是想把房子收回来,能办到吗?
首先,租约是双方签订的合同,有它自己的效力。任何人对一份合法合同的条款的单方面修改,都有可能是违约。可见,您在租期未满时,硬性收回物业,是明显的违约行为,您有可能需要承担违约责任。有人说房东可以提前六十天通知房客搬家,这是一句非常非常不负责任的“告诫”。解约,是民租法非常重视的话题。牵涉面非常广泛。这里我仅仅说,从来就没有所谓“提前六十天通知,租客就得搬出”这回事,除非符合民租法的规定。
我的租客欠了我的租金,我怎么办?
这是最常见的现象,甚至一切都是从欠租开始的。什么是欠租?一语道破,超过了该交租的日子,租金没到房东手里,就是欠租。欠租后,有的房东很友善地写信、发短信、发电邮、发微信给租客,有的言简意赅,有的长篇大论。这些都是完全不必要的。记得吗?刚刚说了,租约就是合同,单方面修改合同(在这里是交租日),就是违约。您已经有理由因为租客违约在先,而取消租约了。当然,欠租后几天,房东收到租金了,租约就不能取消。租客一旦欠租,房东应该及时送达民租法规定使用的“欠租驱逐通知书”表格。如果仍然租金未付,房东可以申请听证会,以至于取消租约,驱逐租客。其中的过程步骤,民租法对每个阶段的日期都有精细的规定。
房子分租给两个单身,两个人闹矛盾,半夜放音乐,在屋里吸烟,聚会不断,甚至还有使用违禁药品的行为。我怎么办?
做为房东,一旦接到租客投诉,您有义务立即着手调查并寻求解决。问题中的乙,已经造成了对甲的“合理享受”的损害,甚至有违法行为。您应该及时向乙发出符合民租法的通知书,通知乙立即停止这些行为。如不果,您应该向房东房客管理局申请解约,以便最终驱逐乙。否则,甲有权向您因“房东不履行义务”而提出索赔。
我出租独立屋给一个家庭,从1月1日,到12月31日,租期一年。租期结束时,租客告诉我,他们要继续租住,我有权拒绝吗?
这个问题还是涉及解约。看似简单,其实其中有许多环节需要分析。民租法第四十四条第四款的确要求租客在期满前最少60天通知房东是否继续租用。然而,在实际业务中,不少的租客忽视了这一点。那么,如果租客通知了,显然双方按时顺利解约。如果没有通知,民租法则认为租客继续租住。这样情况就比较复杂了。租客可能说,期满了,我要搬家了;房东说,你没说不租,提前搬家就是违约。租客也可能说,期满后不通知就是不搬;房东也会说,期满了,你就要走。这里,我只能简单地说,租期届满并不意味着租客就要搬走,具体情形需要个别解说。这是除去欠租以外,第二个容易发生纠纷的问题。房东一定要和租客提前沟通,制定计划。
我把租客给我的押金抵了最后一个月房租。之后,租客改变主意,说继续居住,而且开始欠租了。我怎么办?
首先,什么是“末月”,租期上说的到期日,并不是末月。只有租客说的末月才是末月。一旦确定了末月,那么我建议双方签一个搬迁协议,这样日后有个双方自愿从某日解约的证据。于是才能判断出何时是末月,才能使用末月押金。问题中的情况,房东可以告诉租客,押金其实只是过户了,房东尚未使用,仍然在账,他应该继续支付租金,直到末月确定。
我出租地下室没有许可证。租客欠租,而且威胁我要去报告给政府消防部门,我怎么办?
实话实说,这是个棘手的问题,因为您违规在先。我承认,这样的事到处都有,但是城市法律法规是要首先遵守的。但是,您仍然有地位追讨欠租,和普通程序一样,房东房客管理局仅仅对租务有管辖权,地下室的出租许可是市府的范围。您要判断得失利弊。也许这个回答您不满意,这也正说明,法律是精细的。法律代理人不是万能的,不是进来了法律事务所,代理人什么都能替您搞掂。还是先遵守法律,之后,我们才能游刃有余吧。
出租中的房子我想进去检查,看看房子是否被损坏,可以吗?
加拿大的法律重视个人隐私。您一旦出租了物业给租客,您就失去了对物业的使用权。所以,租客无论把单元弄的多脏乱差,只要未造成实际损害,您均无权过问。除非共管物业管理公司和邻居向您投诉,才需要你去通知租客进去检查。有的房东朋友说“她把我的房子住的多脏多乱”,我不得不提醒您,那里暂时不是您的房子。所以,进入出租物业务必遵守民租法的进入要求。以上情况下房东合法进入:
如果房东有证据显示有紧急情况发生,比如严重的漏水等非正常情况发生需要马上处理,可以不用通知租客直接进到房子里;
房东确信租客放弃居住、已经搬离了,可以不通知直接进入;
如果房东需要对房子做一些正常维护、检查、为后一任租客展示、贷款需求等,需要24小时提前通知租客,通知必须是书面的。
民租法的规定非常细致,这里是链接供您查阅。
http://www.servicealberta.ca/pdf/tipsheets/InFORMation_for_landlords.pdf
在签约时,我多收他几个月的房租,可以吗?
民租法允许房东在租用开始时收取第一个月的房租,和不多于月租的押金。此外,民租法还允许房东收取“合理的”钥匙及开门器的押金,押金金额和市场重新制造钥匙和开门器的金额大致相等。可见,民租法不允许收取任何超过这些押金的钱。所谓的“损害赔偿抵押金”、“提前退租抵押金”、“额外住客抵押金”等等,即使租约中双方完全认可同意,民租法也都不允许。如果一旦被告诉,管理局会要求您及时退回,并可能罚款。顺便说一下,任何租约中与民租法有抵触的条款,都是无效条款。民租法对民用租务有最终的管辖权。
我只出租房子里的一个房间,租客和家人一起使用卫生间和厨房。如果日后我这个租客发生纠纷,怎么办?
如果您或您的子女、父母,或者您配偶的子女或父母,一定要和租客共同使用厨房或者卫生间,一旦发生纠纷,房东房客管理局不受理纠纷告诉。做为房东,您应该及时到附近的警察局投诉,将情形告诉给警察,警察在核实“共用”事实后,往往会按“私闯物业法”处理租客。这是民租法的第五条第i款的规定。
一年的租约,刚刚过去三个月,租客就要提前搬走,我能得到些补偿吗?
事实上,您的确面临租客违约。所以,从某种意义上说,您有权寻求损害赔偿。从表面上看,租客应该付清余下的九个月租金,才能离开。但是在实际业务中,这样缴清余款净身出户的租客太少见了。您无法阻拦租客离开,但是您有地位在法院提起诉讼,一般是在小额法庭。您在证明您的损失时,要有租客搬迁后的新地址,以便送达起诉书,您还会要证明您“完全使用了合理的手段,对损失进行了及时的补救”,但仍然形成损失,凭借证据,寻求法官给出合理判决。
我和租客签了一年的租约,刚刚过去三个月,租客没有过错,我就是想把房子收回来,能办到吗?
首先,租约是双方签订的合同,有它自己的效力。任何人对一份合法合同的条款的单方面修改,都有可能是违约。可见,您在租期未满时,硬性收回物业,是明显的违约行为,您有可能需要承担违约责任。有人说房东可以提前六十天通知房客搬家,这是一句非常非常不负责任的“告诫”。解约,是民租法非常重视的话题。牵涉面非常广泛。这里我仅仅说,从来就没有所谓“提前六十天通知,租客就得搬出”这回事,除非符合民租法的规定。
我的租客欠了我的租金,我怎么办?
这是最常见的现象,甚至一切都是从欠租开始的。什么是欠租?一语道破,超过了该交租的日子,租金没到房东手里,就是欠租。欠租后,有的房东很友善地写信、发短信、发电邮、发微信给租客,有的言简意赅,有的长篇大论。这些都是完全不必要的。记得吗?刚刚说了,租约就是合同,单方面修改合同(在这里是交租日),就是违约。您已经有理由因为租客违约在先,而取消租约了。当然,欠租后几天,房东收到租金了,租约就不能取消。租客一旦欠租,房东应该及时送达民租法规定使用的“欠租驱逐通知书”表格。如果仍然租金未付,房东可以申请听证会,以至于取消租约,驱逐租客。其中的过程步骤,民租法对每个阶段的日期都有精细的规定。
房子分租给两个单身,两个人闹矛盾,半夜放音乐,在屋里吸烟,聚会不断,甚至还有使用违禁药品的行为。我怎么办?
做为房东,一旦接到租客投诉,您有义务立即着手调查并寻求解决。问题中的乙,已经造成了对甲的“合理享受”的损害,甚至有违法行为。您应该及时向乙发出符合民租法的通知书,通知乙立即停止这些行为。如不果,您应该向房东房客管理局申请解约,以便最终驱逐乙。否则,甲有权向您因“房东不履行义务”而提出索赔。
我出租独立屋给一个家庭,从1月1日,到12月31日,租期一年。租期结束时,租客告诉我,他们要继续租住,我有权拒绝吗?
这个问题还是涉及解约。看似简单,其实其中有许多环节需要分析。民租法第四十四条第四款的确要求租客在期满前最少60天通知房东是否继续租用。然而,在实际业务中,不少的租客忽视了这一点。那么,如果租客通知了,显然双方按时顺利解约。如果没有通知,民租法则认为租客继续租住。这样情况就比较复杂了。租客可能说,期满了,我要搬家了;房东说,你没说不租,提前搬家就是违约。租客也可能说,期满后不通知就是不搬;房东也会说,期满了,你就要走。这里,我只能简单地说,租期届满并不意味着租客就要搬走,具体情形需要个别解说。这是除去欠租以外,第二个容易发生纠纷的问题。房东一定要和租客提前沟通,制定计划。
我把租客给我的押金抵了最后一个月房租。之后,租客改变主意,说继续居住,而且开始欠租了。我怎么办?
首先,什么是“末月”,租期上说的到期日,并不是末月。只有租客说的末月才是末月。一旦确定了末月,那么我建议双方签一个搬迁协议,这样日后有个双方自愿从某日解约的证据。于是才能判断出何时是末月,才能使用末月押金。问题中的情况,房东可以告诉租客,押金其实只是过户了,房东尚未使用,仍然在账,他应该继续支付租金,直到末月确定。
我出租地下室没有许可证。租客欠租,而且威胁我要去报告给政府消防部门,我怎么办?
实话实说,这是个棘手的问题,因为您违规在先。我承认,这样的事到处都有,但是城市法律法规是要首先遵守的。但是,您仍然有地位追讨欠租,和普通程序一样,房东房客管理局仅仅对租务有管辖权,地下室的出租许可是市府的范围。您要判断得失利弊。也许这个回答您不满意,这也正说明,法律是精细的。法律代理人不是万能的,不是进来了法律事务所,代理人什么都能替您搞掂。还是先遵守法律,之后,我们才能游刃有余吧。
Friday, 24 March 2017
Tuesday, 21 March 2017
Monday, 20 March 2017
aspcore authorize2 sessions async timed logout
long time no log in, need log in again
logged in successful, redirect to main page
redirect to second page: server redirect to index action to verify authentication, if pass, redirect to second page
logged out
logged in again
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Authorize2.Models;
using Microsoft.EntityFrameworkCore;
namespace Authorize2.Controllers
{
public class AuthorizeController : Controller
{
private Authorize2Context DB;
public AuthorizeController(Authorize2Context context)
{
DB = context;
}
// GET: Authorize
public async Task<IActionResult> Index()
{
var previous_page = HttpContext.Session.GetString("URL");
HttpContext.Session.SetString("URL", "Index");
var machine = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();
var exist_login_record = await DB.LoginRecord.FirstOrDefaultAsync(x => x.Computer == machine);
//if computer not registered, register computer, redirect to log in page
if (exist_login_record == null)
{
DB.LoginRecord.Add(new LoginRecord { Computer = machine });
await DB.SaveChangesAsync();
}
else
{
//if computer is registered, and user logged in, redirect to Main page, otherwise redirect to login
if (exist_login_record.UserId != null)
{
TimeSpan timespan_since_last_login = (TimeSpan)(DateTime.Now - exist_login_record.LastLogin);
//if already logged in and last log in within 30 second ago
if (timespan_since_last_login.TotalSeconds < 30)
{
exist_login_record.LastLogin = DateTime.Now;
await DB.SaveChangesAsync();
var user = await DB.User.FirstOrDefaultAsync(x => x.Id == exist_login_record.UserId);
var log_information = machine + "!" + DateTime.Now.ToString() + "!" + user.Name;
HttpContext.Session.SetString("Log_info", log_information);
if (previous_page != null && previous_page != "Index")
{
return RedirectToAction(previous_page);
}
else
{
return RedirectToAction("Mainpage");
}
}
ViewBag.error_message = "inactive for a long time, please log in again";
}
}
ViewBag.login_record_viewbag = new login_record_dto { computer = machine, last_login = new DateTime(2000, 1, 1, 0, 0, 0), user = "" };
return View();
}
[HttpPost]
public async Task<IActionResult> Index(IFormCollection collection)
{
HttpContext.Session.SetString("URL", "Index");
var user = collection["ux_user"];
var password = collection["ux_password"];
var machine = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();
var exist_login_record = await DB.LoginRecord.FirstOrDefaultAsync(x => x.Computer == machine);
var user_password_match = false;
int user_id = 0;
foreach (var item in DB.User)
{
if (item.Name.Replace(" ", string.Empty) == user && item.Password.Replace(" ", string.Empty) == password)
{
user_password_match = true;
user_id = item.Id;
}
}
//if log in correct, update record, redirect to mainpage
if (user_password_match)
{
exist_login_record.UserId = user_id;
exist_login_record.LastLogin = DateTime.Now;
await DB.SaveChangesAsync();
HttpContext.Session.SetString("Log_info", log_information);
return RedirectToAction("Mainpage");
}
ViewBag.login_record_viewbag = new login_record_dto { computer = machine, last_login = new DateTime(2000, 1, 1, 0, 0, 0), user = "" };
ViewBag.error_message = "user name, password not match";
return View();
}
public ActionResult Mainpage()
{
//if mainpage is not redirected from Index, redirect to Index to check log in
if (HttpContext.Session.GetString("URL") != "Index")
{
HttpContext.Session.SetString("URL", "Mainpage");
return RedirectToAction("Index");
}
HttpContext.Session.SetString("URL", "Mainpage");
var log_information = HttpContext.Session.GetString("Log_info").Split('!');
ViewBag.login_record_viewbag = new login_record_dto
{
computer = log_information[0],
last_login = Convert.ToDateTime(log_information[1]),
user = log_information[2]
};
return View();
}
public ActionResult secondary_page()
{
if (HttpContext.Session.GetString("URL") != "Index")
{
HttpContext.Session.SetString("URL", "secondary_page");
return RedirectToAction("Index");
}
HttpContext.Session.SetString("URL", "secondary_page");
var log_information = HttpContext.Session.GetString("Log_info").Split('!');
ViewBag.login_record_viewbag = new login_record_dto
{
computer = log_information[0],
last_login = Convert.ToDateTime(log_information[1]),
user = log_information[2]
};
return View();
}
public async Task<IActionResult> LogOut()
{
var machine = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();
var exist_login_record = await DB.LoginRecord.FirstOrDefaultAsync(x => x.Computer == machine);
if (exist_login_record != null)
{
exist_login_record.UserId = null;
DB.SaveChanges();
}
return RedirectToAction("Index");
}
}
}
-------------------------------------------------------------------
//mainpage.cshtml
<script src="~/lib/jquery/dist/jquery.js"></script>
<script type="text/javascript">
var computer = '@ViewBag.login_record_viewbag.computer';
var last_login_time = '@ViewBag.login_record_viewbag.last_login';
var user = '@ViewBag.login_record_viewbag.user';
//webpage open event
$(document).ready(function () {
$('#log_lable').text(user + ' last logged in ' + computer + ' at ' + last_login_time);
});
</script>
<h2>Main Page</h2>
<div class="text-right">
<label id="log_lable"></label>
</div>
<br/>
<a href="/Authorize/Logout">logout</a>
<a> | </a>
<a href="/Authorize/secondary_page">secondary page</a>
----------------------------------------------------------
//startup.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Authorize2.Data;
using Authorize2.Models;
using Authorize2.Services;
namespace Authorize2
{
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
if (env.IsDevelopment())
{
// For more details on using the user secret store see https://go.microsoft.com/fwlink/?LinkID=532709
builder.AddUserSecrets<Startup>();
}
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc();
services.AddDistributedMemoryCache();
services.AddSession();
var cs = Configuration.GetConnectionString("SqlConnection");
services.AddDbContext<Authorize2Context>(options => options.UseSqlServer(cs));
// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseIdentity();
// Add external authentication middleware below. To configure them please see https://go.microsoft.com/fwlink/?LinkID=532715
// IMPORTANT: This session call MUST go before UseMvc()
app.UseSession();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
}
reference:
http://stackoverflow.com/questions/22564846/c-sharp-compare-two-datetimes
http://stackoverflow.com/questions/16346146/remove-all-whitespace-from-c-sharp-string-with-regex
sessions
http://benjii.me/2016/07/using-sessions-and-httpcontext-in-aspnetcore-and-mvc-core/
http://stackoverflow.com/questions/33814042/using-tempdata-is-crashing-my-application
美国正式公布对朝鲜作战计划:9万人56天内击毙金正恩?!世纪大战一触即发!
|
Subscribe to:
Posts (Atom)