1. 程式人生 > >接收客戶端在HTTP請求期間發送過來的值(HttpRequestBase/HttpRequest、HttpContextBase/HttpConext、HttpContext.Current)

接收客戶端在HTTP請求期間發送過來的值(HttpRequestBase/HttpRequest、HttpContextBase/HttpConext、HttpContext.Current)

實例 tro 註意 quest 內部 存儲 信息 post span

雖然基本知道Asp.Net MVC程序如何接收來自客戶端HTTP的信息,但是關於HTTP的請求流轉和數據傳遞機制有些模糊,今天就來稍作整理吧。

來看看客戶端代碼:

<form action="Default" method="post" >
    用戶名:<input type="text" name="userName" />
    <input type="submit" value="提交" />
</form>
您輸入的用戶名是:@ViewBag.userName

再來看看服務端代碼:

public class TestController : Controller
{
[HttpGet] public ActionResult Default() { return View(); } [HttpPost] public ActionResult Default(string abc) { ViewBag.userName = Request["userName"];
     或
     ViewBag.userName = HttpContext.Request["userName"];
return View(); } }

之所以在控制器裏可以直接使用Request["XXX"]來接收表單項,是因為當前控制器繼承自Controler,Controler類中有類型為HttpRequestBase的Request屬性,由於這裏TestController繼承自Controller類,因此其內部也具有類型為HttpRequestBase的Request屬性,這個Request屬性就存儲了當前HTTP請求的客戶端相關信息(比如上面的表單信息)。

這裏Request屬性是HttpRequestBase類型,當我們需要把接收客戶端值的任務交給當前控制器對象以外的其他類實例來處理時,那麽可以將當前控制器對象的這個Request屬性作為參數傳給其他類實例。

另外,註意到Controller的定義中還有一個類型為HttpContextBase的HttpContext屬性,

接收客戶端在HTTP請求期間發送過來的值(HttpRequestBase/HttpRequest、HttpContextBase/HttpConext、HttpContext.Current)