asp.net 基礎部分一
过程:
客户端像服务器发送一个请求,iis服务器接收到请求的数据,并且将数据交给c#程序进行处理,并且对数据库进行操作,并且将处理到的结果响应给浏览器客户端
过程2:
第一次浏览器请求,后端应该发一个表单给浏览器,然后再把表单的信息提交回服务器。其中要经过两次,一次请求,一次响应
2.本质:
本质上asp.net 是部署在iis服务器上的,所以一般性处理文件的核心是创建一个有权限处理对浏览器请求的一个类
3.网址解释:http:128.123.11.12:123 //前面的是服务器的id 后面是区分服务器中端口的实质
//注意:在打开http://localhost:6447/Handler1.ashx 需要设置到节点的文件上才能显示
4.另外,在测试登录信息是否正确的时候,可以在/后面加上?并且输入验证信息之后用& 来分隔信息
例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebApplication5
{
/// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler1 : IHttpHandler
{
public void ProcessRequest(HttpContext context) //请求报文
{
context.Response.ContentType = "text/plain"; //请求类型
string username=context.Request["username"]; //登录账号
if (username == "111")
{
context.Response.Write("Hello World"); //逻辑判断 并且响应
}
else
{
context.Response.Write("登录失败");
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
//注意:
1 在""中 最好写‘’防止混乱
2 context.Response.ContentType = "text/html"; //请求类型 //关于请求类型
3 500是服务端报错 404是前端报错(地址输入的问题)没有这个资源 200是成功
例2:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebApplication5
{
/// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler1 : IHttpHandler
{
public void ProcessRequest(HttpContext context) //请求报文
{
context.Response.ContentType = "text/html"; //请求类型
string username=context.Request["username"];
string password = context.Request["password"];
if (string.IsNullOrEmpty(username))
{
context.Response.Write("<form action='Handler1.ashx' method='post'<p>输入账号:<input type='text' name='username'/><p>输入密码:<input type='password'name='password'/><p><input type='submit' vlues='登录'</input></p></p></p></form>");
}
else
{
context.Response.Write("响应失败");
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
例3:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebApplication5
{
/// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler1 : IHttpHandler
{
public void ProcessRequest(HttpContext context) //请求报文
{
context.Response.ContentType = "text/html"; //请求类型
string username = context.Request["username"]; //请求对象获取属性
if (string.IsNullOrEmpty(username))
{
context.Response.Write("<form action='Handler1.ashx' method='post'<p>输入账号:<input type='text' name='username'/><p>输入密码:<input type='password'name='password'/><p><input type='submit' vlues='登录'</input></p></p></p></form>"); //响应
}
else {
if (username == "zhangsan")
{
context.Response.Write("有这个账号");
}
else
{
context.Response.Write("<form action='Handler1.ashx' method='post'<p>输入账号:<input type='text' name='username'/><p>输入密码:<input type='password'name='password'/><p><input type='submit' vlues='登录'</input></p></p></p><p style='color:red'>没有这个账号</p></form>");
}
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
例4:利用io来读取html文件 实现样式分离 //反射是取程序集中的对象 而流是用来读取磁盘上的文件
//html部分
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form action='Handler1.ashx' method='post'>
<p>输入账号:<input type='text' name='username'/></p>
<p>输入密码:<input type='password'name='password'/></p>
<p><input type="submit" value="提交" /></p>
</form>
</body>
</html>
//ashx 部分
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
namespace WebApplication5
{
/// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler1 : IHttpHandler
{
public void ProcessRequest(HttpContext context) //请求报文
{
context.Response.ContentType = "text/html"; //请求类型
string username = File.ReadAllText(@"D:\WebApplication5\WebApplication5\logo.html");
if (string.IsNullOrEmpty(username))
{
context.Response.Write(username);
}
注意:可以用对asp分离的样式进行设计
前端页面 logo.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form action='Handler1.ashx' method='post'>
<p>输入账号:<input type='text' name='username'/></p>
<p>输入密码:<input type='password'name='password'/></p>
<p><input type="submit" value="提交" /></p>
{hahahah}
</form>
</body>
</html>
后端处理 asp.net
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
namespace WebApplication5
{
/// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler1 : IHttpHandler
{
public void ProcessRequest(HttpContext context) //请求报文
{
context.Response.ContentType = "text/html"; //请求类型
string username = context.Request["username"];
string html =File.ReadAllText(@"C:\WebApplication5\WebApplication5\logo.html");
if (string.IsNullOrEmpty(username))
{
context.Response.Write(html);
}
else {
if (username == "lisi")
{
context.Response.Write("有这个账号");
}
else
{
context.Response.Write("<form action='Handler1.ashx' method='post'<p>输入账号:<input type='text' name='username'/><p>输入密码:<input type='password'name='password'/><p><input type='submit' vlues='登录'</input></p></p></p><p style='color:red'>没有获取到html地址</p></form>");
}
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
4.在html页中使用特殊的字符然后在一般处理程序中替换html.Replace("字符","替换的内容")
例:
logo页面{eggrig}
一般处理程序页面
html = html.Replace("{eggrig}", "欢迎您使用本页面");
5.隐藏字段 通过在表单中设置一个隐藏字段 而判断隐藏字段是否为真,来确定非空验证
logo 页面
<input type="hidden" name="ispostback" value="true" />
后端页面
string ispostback = context.Request["ispostback"];
string html =File.ReadAllText(@"C:\WebApplication5\WebApplication5\logo.html");
if (string.IsNullOrEmpty(ispostback))
{
html = html.Replace("{eggrig}", "欢迎您使用本页面");
context.Response.Write(html);
}
引入数据库并且创建一个新的页面
步骤:
利用对数据拼接的技术进行
1.首先创建一个一般处理程序 写入查询的代码
2.再创建一个html前端的模板 并且将模板引入到一般处理程序之中
3.注意:context.Server.MapPath 可以将物理地址装换成相对地址
4.注意:后端不知道查出来是多少行的情况下可以用字符替换
//html 模板
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<table>
<tr>
<td>userID</td>
<td>username</td>
<td>password</td>
</tr>
<tr>
{conmetigjh}
</tr>
</table>
</body>
</html>
//一般处理程序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.IO;
namespace WebApplication5
{
/// <summary>
/// showstudents 的摘要说明
/// </summary>
public class showstudents : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/html";
SqlConnection conn = new SqlConnection("server=.;database=SchoolIDB;uid=sa;pwd=123");
conn.Open();
string sql = "select * from users";
SqlCommand dx = new SqlCommand(sql, conn);
SqlDataAdapter cmd = new SqlDataAdapter(dx);
DataSet set = new DataSet();
cmd.Fill(set);
string html = File.ReadAllText(context.Server.MapPath("/showcunte.html"));
context.Response.Write(html);
DataRowCollection row = set.Tables[0].Rows;
for (int i = 0; i < row.Count; i++)
{
string y= row[i][0].ToString();
context.Response.Write(y);
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
、
// string str = "";
DataRowCollection row = set.Tables[0].Rows;
for (int i = 0; i < row.Count; i++)
{
str = "<tr><td>" + row[i][0].ToString()+"</tr></td>"; //后端替换
}
string html = File.ReadAllText(context.Server.MapPath("/showcunte.html"));
html=html.Replace("{emmmadd}", str);
context.Response.Write(html);
}
//后端退换