如何从get/post请求中取出参数
1,首先了解POST和GET的区别吧。老生常谈
A,get主要是用来像服务器发送请求,获取数据!,POST是向数据库提交数据
B,GET传送的数据量别POST的小。
C,GET的数据是存放在URL上面的,不安全。POST是存放在HTML的 HEADer上面
D,在C#中获取get的数据的方法是request.querrystring();POST是request.Form();
2,传参数:我把它定义为:A,前台传后台;B,后台传前台;
A,前台传后台
提交:
1,form表单
2,URL中带参数
3,JS中异步请求
接收:
Request.QueryString[""] 只能接收GET
Request.Form[""] 只能接收POST
Request.Params[""] get post 都可以的
Request.Params.GetValues("txt_votes"); 取到某name值,以数组形式。
mvc形式传递过来的参数
直接在Control中添加参数,只要参数名和name的名字相同就OK了
///
/// 管理员登陆
///
///
///
///
public ActionResult Login(String user, String pw)
{
MD5 md5 = new MD5();
String password = md5.getMd5(pw, 32);
TAdmin Admin = dao.Login(user, password);
if (Admin != null)
{
Session["Admin"] = Admin;
Session.Timeout = 60;
ViewBag.Session = Session["Admin"];
return RedirectToAction("LoginSuccess");
}
else {
return RedirectToAction("Login", "UserInfo");
}
}
C,后台传前台:
一般的话直接调用ASPX的方法和变量都可以
MVC:
ViewDate:
ViewBag:
ViewModule:
ViewData是在ControllerBase中类型为ViewDataDictionary的属性,以键值对的方式存储,通过key来获取值。
主要用途:
ViewData和ViewBag的作用是一样的,只不过在早期的ASP.NET MVC版本(1和2)中,使用的是ViewData,后期的版本推出了ViewBag,它比ViewData有更多的优点,推荐使用ViewBag。
优点:
● 方便:以键值对的方式把Model存放起来,再从控制器传递到视图。
缺点:
● 单向传递:只能从控制器传递到视图。
● 只能存放当前请求下的Model:无法维持在多个请求下的Model,一旦页面跳转,ViewData的值就变成了null
● 只能存放"小数据":如果要传递"大数据",不推荐使用ViewData。
● 使用key获取的方式,可读性不如ViewBag。
● 没有智能提示
● 没有编译期错误检查
使用ViewBag
ViewData是在ControllerBase中类型为dynamic的属性,是name/value形式的字典。dynamic类型是C# 4.0推出的一个类型,它使得在编译期不需要指明类型。
主要用途:
● 以name/value的形式把Model存放起来,再从控制器传递到视图。视图的Title就是通过ViewBag.Title来设置的。
优点:
● 方便
● 使用name获取对应的值,比ViewData使用key获取对应的值,来得更好。
● 不需要显式指明类型
缺点:
● 单向传递:只能从控制器传递到视图。
● 只能存放当前请求下的Model:无法维持在多个请求下的Model,一旦页面跳转,ViewBag的值就变成了null
● 只能存放"小数据":如果要传递"大数据",不推荐使用ViewBag。
● 没有智能提示
● 没有编译期错误检查
使用PartialView
主要用途:
对于哪些需要重复使用的视图部分,提取出来作为部分视图。
优点:
● 方便重复使用
● 只更新主视图的某个部分
缺点:
● 多过的使用影响可读性
使用TempData
TempData在ControllerBase中类型为TempDataDictionary的属性,是键值对形式的字典,通过key来获取对应的值,在赋值的时候需要显式指明类型。和ViewData和ViewBag的不同之处在于:它可以跨controller,跨action来使用,其内部使用了Session机制。
主要用途:
可以用来传递一些非敏感类的数据,比如验证、错误信息等。
优点:
● 跨controller,跨action
缺点:
● 需要显式赋值,并需要判断是否为null以避免错误
● 没有智能提示
使用ViewModel
它是基于视图需求的Model,它可以把多个View Model以属性的方式合并到一个View Model中。
优点:
● 把多个model放到一个View Model中
● 有智能提示
● 安全性:Domain Model被隐藏
● 当Domain Model有变化,不需要修改视图很多,只需要修改对应的View Model就可以
● 在Domain Model和View之间实现了松耦合
(GET的数据是存放在URL上面的,不安全。POST是存放在HTML的 HEADer上面)现在用FIDDLER来验证一下:
FORM表单源代码:
查看POST的抓包情况:、