2020最新面试宝典带答案MVC专题

1、使用MVC模式有什么优点?

答:可以为一个模型在运行时同时建立和使用多个视图。变化-传播机制可以确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。 视图与控制器的可接插性,允许更换视图和控制器对象,而且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换。 模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进行新的修改。 潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅是用在设计界面的设计中。

2、请简述使用ASP.NET MVC框架访问一个页面的执行流程。

答:一共分为以下几个步骤:

第一步:当请求到达我们的服务器时,在asp.net取得控制之前,windows操作系统的核心组件 HTTP.SYS一直在监听请求端口, 接下来asp.net会通知所有注册的httpModule。 有一个httpModule是默认注册了的。那就是UrlRoutingModule,也就进入了路由模块.核心路由接管控制。

第二步:当核心路由系统接管控制之后,会把请求封装成 RequestContext这样一个数据结构。这个数据结构中包含了几乎所有的请求信息,以便后面的组件可以任意的去使用它。mvc框架就是使用requestContext中的信息,将控制权转移给对应的controller对象,并提出其中的action参数。

第三步:mvcRouteHandler从核心路由模块过渡到mvc框架之后,就要生产对应的controller对象类处理了。

这些对象你可以采用不标准的方法通过直接实现Icontroller接口来创建 ,也可以通过controllerFactory来实现。当然这个控制器工厂可以是你自定义的实现了IcontrollerFactory接口的自定义工厂(或者是默认工厂的子类),也可以是mvc框架自带的DefaultControllerFactory来创建。

第四步:controllers内部的这些action并不是直接自己invoke的 而是通过一个IActionInvoker来触发执行,然后返回actionResultViewEngine去解析。同理,这个IActionInvoker我们也可以自行实现。

3、请说明MVC Filter的特点、思想;框架提供的Filter有哪些?如何扩展Filter

答:Filter思想:AOP面向切面编程的思想,指的是:在不破坏原有的代码的情况下,可以动态的扩展功能。

.NetFramework 框架下的MVC一共有系统默认的三个Filter:

Authorize–权限Filter,专门用来控制权限。

ActionFilter:方法执行前/后,视图替换前后,扩展功能。

ExceptionFilter:异常处理Filter.

扩展Authorize:自定义Filter,继承自Authorize,覆写父类虚方法;标记在需要验证权限的方法、控制器即可,也可全局注册;

扩展ActionFilter:无法直接使用,自定义Filter,继承自ActionFilter,覆写父类虚方法,标记在需要扩展功能的方法、控制器即可。

扩展ExceptionFilter:自定义ExceptionFilter,继承自ExceptionFilter,实现虚方法即可!标记在需要捕捉异常的方法、控制器即可,也可全局注册;

4、请说明MVC中Filter的几种注册方式。

答:三种注册方式:方法注册,控制器注册、全局注册;

5、请详解MVC路由的特点!

答:

  • 能够根据系统需求,灵活的划分请求规则(不同模块请求的 URL 是不一样的)。
  • 屏蔽物理路径,提高系统的安全性,以上情况是无法根据 URL 分析视图文件在站点目录中的位置。
  • 有利于搜索引擎优化,可以将 URL 请求统一规范,以后维护中,如果页面发生变化,URL 可以保持不变。
  • 可分为URL 模式的定义:url: “{占位符1}字面量{占位符2}字面量{占位符n}”,占位符:可以是一个字符串或字符,比如“x”、“id”、“year”等。字面量:可能是一个比较固定的字符,比较常见的是斜杠“/”;也可以是字符串。特殊规则:不能以斜杠“/”或波浪线“~”字符开头,不能包含“?”,同时占位符也不能连续。
  • 可以定义多个路由,路由匹配的时候,只能匹配一个。注意路由名称不能重复;如果项目存在分区,需要添加string[] namespaces命名空间。string[] namespaces 这个命名空间 在分区的时候用到。

6、请说明MVC中global.asax.cs 文件的意义?

答:global.asax这个文件包含全局应用程序事件的事件处理程序。它响应应用程序级别和会话级别事件的代码。  
运行时, Global.asax 将被编译成一个动态生成的 .NET Framework 类,该类是从HttpApplication基类派生的。
因此在global.asax中的代码可以访问HttpApplication类中所有的public或者protected的成员global.asax不被用户直接请求,但global.asax中的代码会被自动执行来响应特定的应用程序事件。
global.asax是可选的,而且在一个web项目中是唯一的,它应该处于网站的根目录。

7、请说明在MVC视图中如果不使用using关键字,如何应用某个自定义实体类型!

答:可以通过Views文件夹下的WebConfig 文件配置:在该文件下的system.web.webPages.razor节点下的namespaces节点添加引用即可。(如果无法识别,请尝试重启VS)

8、请说明MVC中Area的作用以及在MVC中如果使用了Area以后我们需要注意什么?

答:Area:区域,从MVC 2开始,引进了区域的概念,它允许将模型,视图和控制器分成单独的功能节点,换句话说,可以在大型复杂的网站中建立几个区域(模块),每一个区域都有Model,View,Controller机制.

Area可以完全独立出一个项目。

在使用Area的过程中,注意路由的问题,需要在每个路由中指定命名空间。

9、请说明如何抓取并处理,异常Filter 抓取不到的异常?

答:可以在全局文件Global.asax中,编写Application_Error(object sender, EventArgs e)方法,可以抓取到所有异常,并做处理。

案例如下:

protected void Application_Error(object sender, EventArgs e)
{
         var error = Server.GetLastError(); //获取到没有处理的异常
         HttpContext.Current.Response.Write($"Error:{error.Message}"); //这就是异常消息的输出
            Server.ClearError(); //清除这个异常
}

案例如下:

protected void Application_Error(object sender, EventArgs e)
{
         var error = Server.GetLastError(); //获取到没有处理的异常
         HttpContext.Current.Response.Write($"Error:{error.Message}"); //这就是异常消息的输出
            Server.ClearError(); //清除这个异常
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值