1. Dotnet9首页
  2. .NET
  3. ASP.NET Core

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来触发执行,然后返回actionResult给ViewEngine去解析。同理,这个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(); //清除这个异常
}

选择题:

1) 请问在ASP.NET MVC中(B)不属于默认规则的文件夹?

A、App_Start

B、App_End

C、Views

D、Controllers

2)在ASP.NET中以下创建Cookie语法错误的是(BD)?(多选)

A、Response.Cookies[Cookie的名称].Value = 变量值;

B、Request.Cookies[Cookie的名称].Value = 变量值;

C、HttpCookie hcCookie = new HttpCookie(Cookie的名称, 变量值);

    Response.Cookies.Add(hcCookie);

D、HttpCookie hcCookie = new HttpCookie(Cookie的名称, 变量值);

    Request.Cookies.Add(hcCookie); 

3)在ASP.NET  MVC的视图中注释错误的是(B)?

A、<!– html注释–>

B、<!%– 代码块–%!>

C、<%– 代码块–%>

D、<% //单行注释 %>

4)“StudentService”一般属于三层中(B)的命名规范?

  1. 显示层
  2. 业务逻辑层
  3. 数据访问层
  4. 模型层

5)看下面代码

class TesString{
   static void Main(){
   string strOriginal;
   strOriginal = Console.ReadLine();
   bool A = strOriginal.Equals("A");
   Console.WriteLine(A.ToString());
   int B = strOriginal.Length;
   Console.WriteLine(B.ToString());
   }
}

程序运行时,输入”   AAAAA”(五个A的前面有三个空格),则程序输出为(A)

A false

    8

B  -1

    8

C  0

    8

D  false

    5

6 ) 在C#程序中,通过(A )关键字引用命名空间。

a)  using

b)  include

c)  import

d)  have

7 ) 阅读下面的代码:

class Class1
{
    static void Main(string[]args)
    {
        float f = 123.56F;
        object obj = f;
        f = 789.123F;

        Console.WriteLine("f={0}",f);
        Console.WriteLine("obj={0}",obj);
        Console.ReadLine();
    }
}

程序运行后将在控制台窗口显示(D)。

  1. f=789.123   obj=789.123
  2. f=123.56    obj=123.56
  3. f=123.56    obj=789.123
  4. f=789.123   obj=123.56

8 ) 针对switch语句,下例理解正确的是()(选择二项)

  1. case语句和default语句是必须讲究先后顺序排列的。
  2. case语句和default语句是可以不讲究先后顺序排列的。
  3. default语句是可选的。
  4. default语句是必须的。

9 ) .NET三层架构中通常指的哪三层(C)

  1. 模型层、数据访问层、显示层
  2. 通用层、业务逻辑层、显示层
  3. 显示层、业务逻辑层、数据访问层
  4. 显示层、数据访问层、通用层

10) .NET中下列关于三层架构的引用关系正确的是(C)

a)数据访问层引用业务逻辑层、业务逻辑层引用显示层

b)数据访问层引用显示层、显示层引用业务逻辑层

c) 显示层引用业务逻辑层、业务逻辑层引用数据访问层

d) 以上说法都不对

11)在.NET中,关于异常处理组合正确的是(CD)(选择两项)

a) try块是必须的,catch和finally都可以不写。

b) catch块是必须的try和finally都可以不写

c) try块是必须的,catch和finally可以选择其中一个组合。

d) try块是必须的,catch块可以有多个,finally可选。

12)在C#中定义一个数组,正确的代码为(D)

  1. int arraya = new int;
  2. int[5] arraya = new int;
  3. int arraya = new int[5];
  4. int[] arraya = new int[5];

13)阅读下列代码:

class MyAnimals 
{ 
    private int bodytemp=98;
    public int BodyTemp 
    {
        set{ bodytemp=value; }
    }
    public void PrintBodyTemp()	
    {
       Console.WriteLine("温度为:{0}",BodyTemp);
    }
}
class Class1
{
    static void Main(string[]args)
    {
	MyAnimals a = new MyAnimals();
	a.BodyTemp = 56;
  	a.PrintBodyTemp();
    }
}

请问运行上述代码的结果为(A)

  1. 将输出:”温度为:56″
  2. 输出:”温度为:98″
  3. 将显示代码”a.BodyTemp=56;”有错误
  4. 将显示代码为”Console.WriteLine(“温度为:{0}”,BodyTemp);”有错误

14)C#中可选参数,阅读以下代码:

public double AddCalc(double num1,double num2,string operational)
{
  double result=0;
  //中间代码省略....  
  return result; 
} 

能够正确调用的是(D)

  1. AddCalc(operational=”+”,num1=2,num2=3)
  2. AddCalc(“+”,2,3)
  3. AddCalc(operational=”+”,2,3)
  4. AddCalc(2,3,”+”)

15)在ASP.NET MVC中关于控制器和视图数据传递说法正确的是(C)

  1. ViewData 存放的值在视图中使用无需类型转换
  2. ViewBag 存放的值在视图中使用需要类型转换
  3. TempData 主要用于多个动作方法传递数据
  4. 以上说法都不对

16)在ASP.NET MVC中关于路由、控制器说法描述错误的是(C)

  1. 路由系统主要是将各种URL请求转发给控制器处理
  2. 控制器中动作方法可以添加多个
  3. 视图名称不一定需要和动作方法对应
  4. URL中可以通过问号“?”键值的方式进行值传递

17)在ASP.NET中以下(D)不属于数据验证特性。

  1. Required必填验证
  2. Compare比较验证
  3. StringLength 长度验证
  4. Result 正确验证

18)以下关于委托定义说法错误的是(D)

  1. 委托是根据特定的方式传递参数值
  2. 委托可以将方法作为参数进行传递
  3. 委托是多线程中必须要使用到的方式
  4. 以上说法都不正确

19)Razor视图中使用的特殊字符是(B)

  1.  $
  2.  @
  3.  &
  4.  #

20)在ASP.NET以下对于Linq说法不正确的是(D)

  1. Linq可以在程序中有效的遍历查询集合或数组
  2. Linq语法包含以下关键词select、from、in、order by 等…
  3. Linq可以直接操作数据库物理数据
  4. 以上说法都不正确

21)下面代码的输出结果是( B )

int x = 5;
int y = x++;
Console.WriteLine(y);
y = ++x;
Console.WriteLine(y);

a) 5 6

b) 5 7

c) 6 7

d) 5 8

22) 在C#中,下列代码的运行结果是(D)。

int[] num = new int[]{1,3,5};
ArrayList arr = new ArrayList();
for(int i=0;i<num.Length;i++)
arr.Add(num[i]);
Console.Write(arr[2]);

a) 1

b) 4

c) 3

d) 5

23)以下C#程序代码:

int A = 3;
int B = 4
Console.WriteLine(A+B);

因为第二行代码少写了一个分号,程序运行时将(D  )。

  1. 程序中产生逻辑错误
  2. 程序运行后中断
  3. 程序可以正常运行
  4. 程序语法错误

24)以下的c#程序代码:

int count = 3;
while (count > 1)
{
    Console.WriteLine(count);
    --count;
}

程序运行时在控制台打印输出值为(C)。

a)2

  1

b)3

  2

  1

c)3

  2

d)3

  3

25)请阅读以下代码:

for(int i=1;i<=3;i++){
   switch(i){
   case 1:Console.write(i.ToString());
   case 2:Console.write((i * 2).ToString());
   case 1:Console.write((i * 3).ToString());
   }

上述关于C#代码的描述正确的是(D)

  1. 运行时输出149
  2. 运行时输出123246369
  3. 运行时在屏幕上没有输出
  4. 程序将报告编译错误,提示Case1已经出现在改语句中,不能运行

除非注明,文章均由 Dotnet9 整理发布,欢迎转载。

转载请注明:
作者:Dotnet9
链接:https://dotnet9.com/9250.html
来源:Dotnet9
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

发表评论

登录后才能评论