ASP.NET MVC 重点教程一周年版 第十回 请求Controller

简介: 其实我们通常遇到的请求方式无非get/post,但是有很多Web开发人员仍然对二者分不清。     get即通过URL中的QueryString向服务器端传值的方式,它的数据是可见的,可post则是通过一个postdata包向服务器传值,post方式可以传送更多数据(如上传文件),也更安全(如登录)。

    其实我们通常遇到的请求方式无非get/post,但是有很多Web开发人员仍然对二者分不清。

    get即通过URL中的QueryString向服务器端传值的方式,它的数据是可见的,可post则是通过一个postdata包向服务器传值,post方式可以传送更多数据(如上传文件),也更安全(如登录)。

    本文将演示各种通过客户端页面(即最终生成的页面)向Controller提交请求以及在Controller中接受的方式。

约定

    本文所有的示例都将是演示一个登录过程,但并不关注判断过程,所以判断方面仅做简单的IF操作。

    而提交的实体我们新建一个Account类。

image

它的内容如下:

   1: /// <summary>
   2:  /// 用户账户的实体类
   3:  /// </summary>
   4:  public class Account {
   5:      /// <summary>
   6:      /// 用户名
   7:      /// </summary>
   8:      public string UserName { get; set; }
   9:      /// <summary>
  10:      /// 密码
  11:      /// </summary>
  12:      public string Password { get; set; }
  13:  }

文中大多数示例使用了Account类,但并不是所有的示例都使用了Account。

在文中我们并不关注提交信息的页面的Controller,仅关注处理信息的Controller。

而Controller中存在这样一个方法,用于辅助判断:

   1: /// <summary>
   2: /// 一个辅助判断的方法
   3: /// </summary>
   4: /// <param name="userName">用户名</param>
   5: /// <param name="password">密码</param>
   6: /// <returns></returns>
   7: string AreEquals(string userName,string password)
   8: {
   9:     return (userName.ToLower() == "admin" && password == "123456").ToString();
  10: }

以Post提交的数据来看传递

    之所以这里先说Post是因为相对于Get方式来说Post的情况更全,说明了Post的情况Get也就差不多了。

View:

   1: <%using (Html.BeginRouteForm(new { controller = "home", action = "process" })) {%>
   2: <p>
   3:     <label>用户名:</label><%=Html.TextBox("username") %></p>
   4: <p>
   5:     <label>密码:</label><%=Html.TextBox("password") %></p>
   6: <p>
   7:     <input type="submit" /></p>
   8: <%
   9:     }%>

image

1.从最基本的开始,使用Request获取提交的信息

 

 

   1: /// <summary>
   2: /// 处理请求的Action 
   3: /// </summary>
   4: /// <returns></returns>
   5: public ActionResult Process()
   6: {
   7:     return Content(
   8:         AreEquals(Request.Form["username"], Request.Form["password"])
   9:         );
  10: }

    这个无多解释,通过Request.Form来获取表单提交我想是最基本的方法之一,如果您对这种方法不了解的话,那么就说明您的ASP.NET基础有待提交,可以查看ASP.NET五大对象的相关文章。

2.通过Action参数提交

相比之下这个可能更加漂亮些。

   1: /// <summary>
   2: /// 处理请求的Action 
   3: /// </summary>
   4: /// <param name="userName">这两个参数务必与表单中的名称一致</param>
   5: /// <param name="password"></param>
   6: /// <returns></returns>
   7: public ActionResult Process(string userName, string password)
   8: {
   9:     return Content(
  10:         AreEquals(userName, password)
  11:         );
  12: }

3.UpdateModel来获取传递

   1: /// <summary>
   2: /// 处理请求的Action 
   3: /// </summary>
   4: /// <returns></returns>
   5: public ActionResult Process()
   6: {
   7:     var a = new Account();
   8:     UpdateModel(a);//确定a包含Password及UserName这两个属性即可,否则抛出异常
   9:     return Content(
  10:         AreEquals(a.UserName, a.Password)
  11:         );
  12: }

当然我们这里很容易出现异常所以可以使用另一个方法来替代,TryUpdateModel:

   1: /// <summary>
   2: /// 处理请求的Action 
   3: /// </summary>
   4: /// <returns></returns>
   5: public ActionResult Process()
   6: {
   7:     var a = new Account();
   8:     //这样就可以在没有成功转换时使用另一种处理方式
   9:     return Content(
  10:         TryUpdateModel(a))?AreEquals(a.UserName, a.Password):bool.FalseString
  11:         );
  12: }

上面这种UpdateModel的方法已经很简单了,可是ASP.NET MVC为我们提供了更简单的方式:

4.使用绑定

   1: /// <summary>
   2: /// 处理请求的Action 
   3: /// </summary>
   4: /// <returns></returns>
   5: public ActionResult Process(Account a)
   6: {
   7:     return Content(
   8:         AreEquals(a.UserName, a.Password)
   9:         );
  10: }

就是这么简单

 

可能存在的问题

我们在提交表单时可能有多个Account对象,这种情况下我们应该怎么办呢。

请看下面:

image

View:

   1: <%using (Html.BeginRouteForm(new { controller = "home", action = "process" })) {%>
   2: <p>
   3:     <label>用户名1:</label><%=Html.TextBox("a.username") %></p>
   4: <p>
   5:     <label>密码1:</label><%=Html.TextBox("a.password") %></p>
   6:        <p>
   7:     <label>用户名2:</label><%=Html.TextBox("b.username") %></p>
   8: <p>
   9:     <label>密码2:</label><%=Html.TextBox("b.password") %></p>
  10: <p>
  11:     <input type="submit" /></p>
  12: <%
  13:     }%>

注意这里的表单元素的Name、

下面是处理的Action代码:

   1: /// <summary>
   2:  /// 处理请求的Action 
   3:  /// </summary>
   4:  /// <returns></returns>
   5:  public ActionResult Process(Account a ,Account b)
   6:  {
   7:   //处理代码
   8:      return View();
   9:  }

这就一切OK了

目录
相关文章
|
Go
在golang中发起http请求以获取访问域名的ip地址实例(使用net, httptrace库)
这只是追踪我们的行程的简单方法,不过希望你跟着探险家的脚步,即使是在互联网的隧道中,也可以找到你想去的地方。接下来就是你的探险之旅了,祝你好运!
646 26
|
11月前
|
JSON 前端开发 Java
Spring MVC 核心组件与请求处理机制详解
本文解析了 Spring MVC 的核心组件及请求流程,核心组件包括 DispatcherServlet(中央调度)、HandlerMapping(URL 匹配处理器)、HandlerAdapter(执行处理器)、Handler(业务方法)、ViewResolver(视图解析),其中仅 Handler 需开发者实现。 详细描述了请求执行的 7 步流程:请求到达 DispatcherServlet 后,经映射器、适配器找到并执行处理器,再通过视图解析器渲染视图(前后端分离下视图解析可省略)。 介绍了拦截器的使用(实现 HandlerInterceptor 接口 + 配置类)及与过滤器的区别
1116 0
|
JSON 数据格式
.net HTTP请求类封装
`HttpRequestHelper` 是一个用于简化 HTTP 请求的辅助类,支持发送 GET 和 POST 请求。它使用 `HttpClient` 发起请求,并通过 `Newtonsoft.Json` 处理 JSON 数据。示例展示了如何使用该类发送请求并处理响应。注意事项包括:简单的错误处理、需安装 `Newtonsoft.Json` 依赖,以及建议重用 `HttpClient` 实例以优化性能。
617 2
|
设计模式 前端开发 Java
Spring MVC——项目创建和建立请求连接
MVC是一种软件架构设计模式,将应用分为模型、视图和控制器三部分。Spring MVC是基于MVC模式的Web框架,通过`@RequestMapping`等注解实现URL路由映射,支持GET和POST请求,并可传递参数。创建Spring MVC项目与Spring Boot类似,使用`@RestController`注解标记控制器类。
252 1
Spring MVC——项目创建和建立请求连接
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
1568 2
|
数据采集 JSON API
异步方法与HTTP请求:.NET中提高响应速度的实用技巧
本文探讨了在.NET环境下,如何通过异步方法和HTTP请求提高Web爬虫的响应速度和数据抓取效率。介绍了使用HttpClient结合async和await关键字实现异步HTTP请求,避免阻塞主线程,并通过设置代理IP、user-agent和cookie来优化爬虫性能。提供了代码示例,演示了如何集成这些技术以绕过目标网站的反爬机制,实现高效的数据抓取。最后,通过实例展示了如何应用这些技术获取API的JSON数据,强调了这些方法在提升爬虫性能和可靠性方面的重要性。
382 1
异步方法与HTTP请求:.NET中提高响应速度的实用技巧
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
445 7
|
API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
378 0
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
377 0
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
375 0