zoukankan      html  css  js  c++  java
  • ASP.NET 一般处理程序基础1(Get Post 表单提交 Http协议 Nvelocity模板引擎)

    1、ASP.NET MVC 纯洁 ASP.NET-----分为aspwebform 和asp mvc


    2、ASP.NET MVC 访问数据库用到EF:涉及到ado.net,linq, ORM


    3、借助Mono平台,将.NET运行到IOS Android


    4、不能用Application统计在线人数,购物车的数据不能放到Session里面,不能使用LinkButtion做超链接(搜索引擎爬不到任何一个页面除了首页)


    5、ASP.NET互联网开发和管理系统开发。


    6、HttpHandler ashx返回内容


    7、VS2012安全考虑IIS默认不允许访问目录


    8、建立ashx,一般处理程序

    public void ProcessRequest(HttpContext context)
    {
        string action=context.Request["name"];//请求name的值,放到action中
        int age=Convert.ToInt32(context.Request["age"]);
    
        context.Response.Write("<font color='red'>Hello"+action+"</font>");
        context.Response.Write("<font color='green'>我今年"+age+"岁</font>");
    }

    输入localhost3169/TestHandler.ashx?name=donghai&age=22&test=5

    但是不想自己手动填写,需要进行页面的表单提交

    <from action="TestHandler.ashx" method="get">//action把填的东西提交给哪一个服务器的页面
    姓名:<input type="text" name="Username"><br/>//就是把input里面的内容提交给那么这个参数
    年龄:<input type="text" name="password"><br/>//设为get就是把age,name以参数的形式放到url里
    <input type="submit">
    </form>

    9、<input type="text" id="i1"name="Username"> html中id是唯一的不能重复的,但是元素的name 是可以重复的,若两个空间name相同,则都会提交


    10、VIP的判断

    <input type="checkBox" name="isVIP">
    ---------------------------------------
    ashx里 string isVIP=context.Request["isVIP"];
    context.Response.Write("<br/>"+isVIP);
    这样的话,页面请求会返回on如果你勾上checkbox

    在ashx加上if(isVIP=="on"){context.Response.Write("您是VIP");} else{ }
    *********************************************只有input、textarea、select才会提交给服务 器
    *********************************************只有三种属性的value值才会提交给服务器,标 签必须设置name属性
    <textarea></textarea>
    <select>
    <option>福州</option>
    <option>福州</option>
    <option>福州</option>
    </select>
    11、GET和POST与数据如何传递没有关系

      GET和POST是由HTTP协议定义的。在HTTP协议中,Method和Data(URL, Body, Header)是正交的两个概念,也就是说,使用哪个Method与应用层的数据如何传输是没有相互关系的。

    <from action="TestHandler.ashx" method="get">//action把填的东西提交给哪一个服务器的页面
    姓名:<input type="text" name="Username"><br/>//就是把input里面的内容提交给那么这个参数
    年龄:<input type="text" name="password"><br/>//
    <input type="submit">
    </form>

    设为get就是把age,name以参数的形式放到url里,不安全。
    ------------------------------------------------------------------------------------------
    把method改为post,这样地址栏上没有反应,不会写你的name age,但是network里面还是能看到的
    ,所以post以form data里发出去的。暂时理解为通过后台传过去了。历史记录里也不会看到。所以get通过url传递,post隐藏起来。get的url长度有限,但是post理论上无限的。


    12、http协议是浏览器服务器之间的交互的协议,http不保持连接。数据库服务器就是长连接的


    13、get/HTTP/1.1表示已get方式请求,使用http/1.1协议 404代表页面没有找到 200代表ok 302表示重定向//用IE开发人员工具来看


    14、

    context.Response.ContentType="text/html";
    context.Response.Write("<a href='http://www.baidu.com'>百度</a>");
    返回html。若改成context.Response.ContentType="text/plain"
    则返回一个普通的文本。


    15、进行登录的判断

    context.Response.ContentType="text/plain";
    string username=context.Request["username"];
    stirng username=context.Request["password"];
    if(username=="admin"&&password=="123")
    {
       context.Response.Write("ed2k://adfsafsdafsdafas");
    }
    else
    {
       context.Response.Redirect("Cannot.html");
    }

    localhost:3169/VIP.ashx?username=admin&password=123---------------测试下
    16、模板的需求,想把HTML和ashx结合起来。

    context.Response.ContentType="text/html";//渲染成html
    String username=context.Request["username"];
    String password=conetxt.Request["password"];
    if(sting.IsNullOrEmpty(username)&&string.IsNullOrEmpty(password))
    {
       context.Response.Write("<html>");
       context.Response.Write("<head></head>");
       context.Response.Write("<body><from action='login.ashx'><input type=‘text’name='username'/><input type='password' name='password'/><input> type='submit' value='登录'/><form></body>");
       context.Response.Write("<html>");
    }//如果用户名密码不为空则显示登录后的页面,否则提示登录
    else
    {
    if(username=="admin"&&password="123")
    {
       context/Response.Write("<html><head></head><body>登陆成功</body></html>");
    } 
    else
    {
       context.Response.Write("<html>");
       context.Response.Write("<head></head>");
       context.Response.Write("<body><from action='login.ashx'><input type=‘text’ name='username' value='"+username+"'/><input type='password' name='password' value='"+password+"'/><input>type='submit' value='登录'/><form></body>");//将用户名和密码重新写回去,其实是重画出来的。
       context.Response.Write("<html>");
       context.Response.Write("<html><head></head><body>用户名密码错误</body></html>");
    }
    }

    ----------------------------------这是把html页面直接放到ashx文件中,并且把用户填写的值,返回到textbox中,看起来好像是原来用户填写的,其实是重新画的。

    这样就是if中对这个页面写入,else还要有同样的重写,所以这样太麻烦了,要有一种新的方式才可以,把工作简化。提出模板引擎

    其实也可以不用模板引擎直接,把上面的replace掉,例如:

    string html="<html><head></head><body><strong>登录</strong><form action='Login.ashx'><input type='text' name='username' value='{username}'/><input type='text' name='password' value='{password}'/><input type='submit' value="登录"/></form><p>{msg}</p></body></html>";
    if(string .IsNullOrEmpty(username)&&string.IsNullOrEmty(password))//注意这句,都是string
    {
    string code=html.Replace("{username}","");
    
        code=html.Replace("{password}","");
    
        code=html.Replace("{msg}","");
    
        conetxt.Response.Write(code);
    }

    17、模板引擎有很多中,.NET中就有Nvelocity(http://www.castleproject.org/download/),他是从Java版本的Nvelocity移植过来的,StingTemplate、RazorEngin
    <body>
    <form action="Login.ashx">
    用户名:<input type="text" name="username" value="$username"/><br/>
    密码:<input type="text" name="username" value="$password"/><br/>
    <input type="submit" value="登录">
    </body>
    把Value用$替换掉,Nvelocity是个程序集,需要添加对它的引用。
    -----------------------------在ashx里面
    用Nvelocity的代码,不用记,每次用的时候拷贝即可。

    public void ProcessRequest(HttpContext context)
    {
       context.Response.ContentType="text/html";
       string username=context.Request["username"];
       string password=context.Request["password"];
    if(string IsNullOrEmpty(username)&&string IsNullEmpty(password))
    {
       VelocityEngine vltEngine = new VelocityEngine();//初始化模板引擎
       vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");//代表模板是位于系统文件中的
       vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, System.Web.Hosting.HostingEnvironment.MapPath("~/templates"));//把一个服务器端的路径映射为物理路径,模板文件所在的文件夹,~/是位于项目根目录下
       vltEngine.Init();//初始化
       VelocityContext vltContext = new VelocityContext();//创建上下文,用来给模板传数据的
    
       vltContext.Put("username", "");//设置参数,在模板中可以通过$username来引用,设置空
       vltContext.Put("password","");
       vltContext.Put("msg","");//有几个添加几个,根据自己需要
    
       Template vltTemplate = vltEngine.GetTemplate("login.htm");//得到这个模板,写入自己的模板名字
       System.IO.StringWriter vltWriter = new System.IO.StringWriter();
       vltTemplate.Merge(vltContext, vltWriter);
       //return vltWriter.GetStringBuilder().ToString();//这个是写到函数里返回用的,不写在函数里的话可以这样
       string html=vltWriter.GetStrigBuilder().ToString();
       context.Response.Write(html);//把返回的这个值扔给浏览器就行了
       }
    }
    else
    {
       if(username=="Admin"&&password=="123")
       {
          context.Response.Write("登录成功");
       }
    else
    {
       VelocityEngine vltEngine = new VelocityEngine();//初始化模板引擎
       vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");//代表模板是位于系统文件中的
       vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, System.Web.Hosting.HostingEnvironment.MapPath("~/templates"));//把一个服务器端的路径映射为物理路径,模板文件所在的文件夹,~/是位于项目根目录下
       vltEngine.Init();//初始化
       VelocityContext vltContext = new VelocityContext();//创建上下文,用来给模板传数据的
    
       vltContext.Put("username", "username");//设置参数,在模板中可以通过$username来引用,设置空
       vltContext.Put("password","password");
       vltContext.Put("msg","用户名或者密码错误");//有几个添加几个,根据自己需要
    
       Template vltTemplate = vltEngine.GetTemplate("login.htm");//得到这个模板,写入自己的模板名字
       System.IO.StringWriter vltWriter = new System.IO.StringWriter();
       vltTemplate.Merge(vltContext, vltWriter);
    
       string html=vltWriter.GetStrigBuilder().ToString();
       context.Response.Write(html);//把返回的这个值扔给浏览器就行了
    }
    }

    18、Nvelocity非常强大,给模板设置的属性如果有属性,还可以进一步获取,如$data.Person.Name
    public class Person
    {
        public string Name{get;set;};
       public string Age{get;set};
    }
    ---------在ashx中
    Person person=new Person();
    person.Name="Tom";
    person.Age="30";
    ..................//省略
    vltContext.Put("p",Person);//直接可以把这个Person对象传进去
    .................//省略
    --------在html中可以直接$p.Name取值,//不要忘记这个html是在Template文件夹下的,vlt代码中要指定路径和模版名称

  • 相关阅读:
    Python有哪些华而不实的技巧?
    json:dumps/loads & pickl
    json模块与第三方模块的引入
    os 及 sys 模块补充
    如何白嫖视频会员
    python和SAS的思考
    5、根据进程号PID查询其服务路径
    5、安装mongodb 异常
    2、shell 判断字符串是否包含另一个字符串
    【九校2D2T1】旋转子段
  • 原文地址:https://www.cnblogs.com/d685600/p/3635590.html
Copyright © 2011-2022 走看看