导图社区 经典net面试题目
经典.net面试题目
MVC
1.是什么MVC模式?
MVC是一个架构模式,它分离了表现与交互。它被分为三个核心部件:模型,视图,控制器,
谈谈你对MVC模式的理解?
。MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。 ·视图(View):视图是用户看到并与之交互的界面,可用于CS/BS的设计。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Macromedia Flash和象XHTML,XML/XSL,WML等一些标识语言和Web services。 ·模型(Model):模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。 ·控制器(Controller):控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后用确定j用哪个视图来显示模型处理返回的数据。
3.描述ASP.NET MVC项目文件结构及各文件的作用?
App.Data:放置数据库文件,codefirst模式默认在LocalDB中生成文件在此查看 App_Start:放置配置文件代码 AuthConfig.cs配置安全设置,包括网站的OAuth登录,可以让用户用外部提供的证书登录,然后将源自哪些提供方的一些功能集成进你的web应用 BundleConfig.cs:用来将css和JavaScript进行压缩 FilterConfig.cs:注册全局MVC的过滤器 Routeconfigcs:路由配置,存放MVC配置语句 WebApiConfig.cs:注册 WEBAPI路由 Controllers:放置控制器类 Filters:放置过滤器代码 Content:放置css和JavaScript脚本,图像以外的文件 Model:放量数据描述、操纵类和业务对象类 Scripts:放置JavaScript脚本 Views:放置视图 favicon.ico:网站标题栏icon序文件 Global.asax:全局应用程序文件 packages.config是NuGet的基础设施用于跟踪扩展安装包以及版本信息 Web.config:网站配置文件。包含WebiDebug conig 和 WebRelease.config两个版本。 Controllers:单元测试目录,名称与Controlers一致,用来测试中的acion packages.config:是NIGet的基础设施用于跟踪扩展安装包以及版本信息
4.使用MVC有哪些好处?
.耦合性低 视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。 ·重用性高 随着技术的不断进步,需要用越来越多的方式来访问应用程序。MVC模式允许使用各种不同样式的视图来访问同一个服务器端的代码,因为多个视图能共享一个模型,它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),比如,用户可以通过电脑也可通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能被不同的界面使用。 MVC使开发和维护用户接口的技术含量降低 ·部署迅速 使用MVC模式使开发时间得到相当大的缩减,它使后台程序员集中精力于业务逻辑,界面设计师集中精力于表现形式上。 ·可维护性高 分离视图层和业务逻辑层也使得WEB应用更易于维护和修改,也使得自动化UI测试成为可能,因为后台代码移到了,NET类。这让我们更容易做单元测试和自动化测试。 ·有利软件工程化管理 由于不同的层条司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码。控制器也提供了一个好处,就是可以使用控制器来联接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。给定一些哥是用的模型和视图,控制器可以根据用户的需求选择模型进行处理,然后选择视图将处理结果显示给用户。
5.使用MVC有哪些缺点?
·没有明确的定义完全理解MVC并不是很容易。使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。同时由于模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难。每个构件在使用之前都需要经过彻底的测试。 ·不适合小型、中等规模的应用程序花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。 ·增加系统结构和实现的复杂性对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。 ·视图与控制器间的过于紧密的连接视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。 ·视图对模型数据的低效率访问依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。 ·一般高级的界面工具或构造器不支持模式改造这些工具以适应MVC建立分离的部件的代价是很高的,会造成MVC使用的困难。
6.MVC中的HTML helpers是什么?
HTML helpers 帮助你渲染视图中的HTML控件。@Html.TextBox("LastName")
7.如何生成从一个视图链接到另一个视图的超链接?
使用Html.ActionLink方法,参数列表中传入控制器和动作。
8.HTML.TextBox 和 HTMLTextBoxFor 有什么不同?
都输出相同的HTML,TextBox是弱类型的,而TexBoxFor 是强类型的扩展方法。TextBox需要属性名字作为string类型的参数,然而TextBoxfor方法是一个强类型的扩展方法,它使用lambda表达式,绑定特定的模型属性到文本框中,所以会自动显示属性的值到文本框主题插入关 中,如果你指定了一个错误的属性名字,TextBox不会报编译错误,但是会在运行的时候报插入评i论错误:TetBoxFor是一个泛型方法,如果你指定的属性名字是错误的,或者属性的名字发生了改变,它会给你一个编译的错误。
9.MVC的路由选择是什么?在哪里写路由映射表?
路由选择功能帮你定义一个URL规则,映射URL到控制器。在“globalasax-文件中注册路由映射表。举一个例子,我们想让用户输入“http:/localhost/View/ViewCustomer/时,它转向到“Customer”控制器并且调用Displaycustomer,这个通过Maproute方法来定义, 代码如下: routes.MapRoute("View". "View/Viewcustomer/id)". new{ controller="Customer", action=“DisplayCustomer", id=UrlParameter.Optional });
10.我们可以映射多个URL到同一个动作吗?
可以。只需要添加多条不同Key名字的记录,并且指定同样的控制器和动作。
11.如何限制一个动作的类型为GET或 POST?
我们可以给MVC的动作一个HttpGet 或HtpPost属性去限制HTTP的类型。你可以看下面的代码段,这个Displaycustomer动作只能用HtpGet方式访问。如果我们尝试用Http post的方式,会看到错误信息。 [HtpGet] public ViewResult DisplayCustomer(int id) { Customer objCustomer=Customerst[id]; return View("DisplayCustomer".objCustomer); }
12.在MVC中我们如何识别是PSOT还是GET调用?
在控制器中识别POST或GET,我们可以使用Request HttpMethod
13.在MVC中保持会话有哪些方式?有什么不同?
·Temp data-在不同的控制器或动作间转换时保持数据。另外,进行页面转向时,tempdata可以保持数据。它是一个内部的Session变量。 ·View data-可以在控制器和视图间保持数据。 ·View Bag-它是视图数据的动态包装。使用 Viewbag不需要类型转换。它使用的是内部动态关健词。 ·Sesion-使用Session变量可以在任何实体间保持数据。 ·Hidden-只能保持数据从UI到Controller。可以使用HTML控制器或隐藏字段,用HTTP方式(POST或GE)发送数据到控制器。
14.MVC的局部视图是什么?
局部视图是一个可重复调用的视图(和用户控件一样),它可以嵌入到视图里面。例如:你的站点页面有统一的莱单、头部、尾部,想在所有页面重用菜单、头部和尾部。局部视图创建好后,在主视图中使用Html.RenderPartial 调用。
15.MVC中如何做输入验证?
·在实体类中引用System.ComponentModelDataAnnotations 命名空间 ·导入js文件jquery-1.7.1js、jqueryvalidateijs、jqueryvalidate.unobtrusivejs ·给实体类的属性附加特性[Required(ErorMessage=“姓名不得为空”),用户提交页面时如果不给属性赋值,它将不能通过验证 ·如果你想拿到错误详情,你可以使用Errors集合。 ·为了显示验证错误提示,需要使用Html helper类中的ValidateMessagefor方法,而使用Html helper类中的ValidationSummary方法可以一次显示所有的错误信息。 ·在controller中,使用ModelStatelsValid属性检查数据是否正确。如果你已经创建好模型对象,你可以在Contronler 中调用TryUpdateModel去检查它是否正确。如果你想在Controler中添加错误信息,你可以使用AddModelError函数。
16.MVC表单验证有哪些方式?
·在实体类的属性上标注Required特性 ·如果你要去检查字符的长度,你可以使用StringLength ·如果你想使用注册表达式,你可以使用RegularExpression ·如果你想检查数字是否在一个范围内,你可以使用Range ·有时你想比较两个字段的值,我们可以使用Compare
17.如何使用json验证插件来远程验证程序?
[Remoter(Action","Controler",ErorMessage=“用户名已经存在] public string Name{get;set;} public ActionResult CheckName0{ if(Request.Params["Name"]=="newer") return Json(false,JsonRequestBehavior.AllowGet); else return Json(true,JsonRequestBehavior.AllowGet); }
18.什么是MVC中的Razor?
它是一个轻量级的视图引擎。MVC最初只有一个ASPX的视图类型,直到MvC3才引进了Razor。相比ASPX,Razor是一个干净的、轻量级的和语法更简单。
2.简单描述MVC的基本流程?
所有的终端用户请求被发送到控制器。 控制器依赖请求去选择加载哪个模型,并把模型附加到对应的视图。附加了模型数据的最终视图作为响应发送给终端用户。
20.MVC有多少种不同类型的结果类型?
MWC中的12种结果类型,最主要的是ActionResut基础类,它有11个子类型,如下: ·ViewResult-给响应流渲染指定的视图。 ·PartialViewResult-给响应流渲染指定的局部视图。 ·EmptyResult-返回空的响应结果。 ·RedirectToRouteResult-执行一个HTTP转向到一URL、这个URL由基于路由数据的路由引擎来决定 ·JsonResult-序列化一个ViewData对像到JSON格式。 .JavascriptResult-返回一段Javascript代码,它可以在客户端执行。 ·ContentResult-写内容到响应流,不需要视图支持。·FileContentResult-返回一个文件到客户端。 ·FileStreamResult-返回一个文件到客户端,它提供的是流。 ·FilePathResult-返回一个文件到客户端。
21.MVC中的ActionFilters是什么?
ActionFilters 帮助你在MVC action执行中或执行后,执行一些逻辑。 Action filters通常用在下面的场景中: ·在action发生前,执行POST逻辑 ·取消一个当前的执行。 ·检查返回值。 ·给action 提供特殊的数据。 你有两种方式创建 action filters: ·内联action filter. ·创建一个ActionFilter属性。 ·创建内联actionfiter,我们需要执行lActionFiter接口。IActionFiter接口有两个方法:OnActionExecuted 和OnActionExecuting。在这两个方法中我们可以执行预处理逻辑或取消逻辑。 内联 Action filter的问题是不能跨Controler。我们可以转换内联action filter 到action filter属性。创建 action filter 属性,我们需要继承ActionFilterAtribute和执行1ActionFiter接口,之后我们可以在controller上使用这个属性。
22.MVC中如何创建自定义视图引辈?
步骤1:我们需要创建一个类去执行View接口。我们应该在这个类的render函数中写一些逻辑,指明如何渲染视图。 步聚2:我们需要创建一个类,它继承VirtualPathProviderViewEngine,并且我们需要提幻灯片高级视图帮助供一个文件夹路径和视图文件扩展名。例如,Razor是“cshtmr,aspx是".aspX". 步骤3:我们需要注册自定义视图到视图集合。注册自定义视图引擎最适合的地方是globalaspx文件中的ViewEngines集合。
23.在MVC中如何用表单认证?
表单认证和ASP.NET的表单验证一样,第一步是设置认证模式为Forms,loginUrl是指向到controller,而不是一个页面。 <authentication mode=“Forms"> <forms loginUrl="~/Home/Login"timeout="2000"/> </authentication> 我们也需要创建一个controller,去验证用户。如果验证通过,需要设置cookies值。 public ActionResult LoginO{ if((Request.Form["txtName']=="jack")&&(RequestForm"txtPwd']=="123)) { FormsAuthentication.SetAuthCookie(jack",true); return View("About"); } else { return View(("Index"); }} 其它需要验证的action都需要加一个Authorize属性,如果用户没权限将转向到登陆页。 [Authorize] PublicActionResult Default0 { return View(); } [Authorize] publicActionResult Abouto() { return View(); }
24.在MVC中如何返回JSON格式的结果?
在MVC中,我们有]sonResu1t类可以返回JSON格式数据。下面是一个简单的例子,它使用1sonResult 返回Customer对象的JSON格式。 public JsonResult getCustomer0{ Customer obj=new Customer0; objCustomerCode ="1001"; objCustomerName ="jack”; return Json(objlsonRequestBehavior AlowGet); }
25.MVC路由机制中URL有哪些模式匹配规则?
·controller 和action是约定的占位符 ·定义在{}外面的字面量必须严格匹配 ·不区分大小写 ·不能以/或~字符开头,不能包含? ·占位符{}不能连续
26.MVC过滤器的8个执行步骤的顺序是什么?
·OnAuthorization ·OnActionExecuting ·Action:Response.Write ·OnActionExecuted ·OnResultExecuting ·Action:return View0; ·OnResultExecuted ·OnException
27.MVC过滤器的优先顺序是怎样的?
·全局过滤器优先执行FilterConfig类中RegisterGlobalFilters方法中,用GlobalFilterCollection 参数添加new HandleErrorAttribute0 ·过滤器特性参讨滤器名称(Order=整数)]数字越小,越先执行 ·控制器内部重写的过滤器方法,比附加特性的过准器方法优先执行
28.MVC过滤器如何使用?
异常过滤器异常类型[HandleError(Order=3,ExceptionType=typeof [SqlException)] 异常过滤器要通知系统已经处理了异常 ExceptionContext.ExceptionHandled=true; 将用户的错误请求重定向ExceptionContext.Result=new RedirectResult("~/Error/Andex"+filterContextException.Message;
29.Web服务有哪两种主流风格?
一种是SOAP风格:基于方法,产品是WebService;另一种是REST风格:基于资源,产品是WebAPI。 ·HTTP是最常用的协议。过去的很多年,浏览器是我们使用HTTP方式公开数据的首选客户端。但是日新月异,客户端发展到多种形式。 我们需要使用HTTP方式传递数据给不同的客户端,例如:移动手机、Javascript,Windows应用等等。WebAPI是一个通过HTTP方式公开数据技术,他跟随REST规则 ·在Visual studio 2012 及.NET45中,作为ASP.NET MVC4的一部分,微软正式推出新的网络服务框架ASPINET Web APl。ASP.NET Web API是一种框架,用于轻松构建可以访问多种客户端的 HTTP 服各 ·Web AP1可以返国son、XML类型的数据,对于数据的增、删、改、查,提供相对的资源操作,按照请求的类型进行相应处理,主要包括Get(室)、Post(增)、Put)、Deletetly),这些都是http协议支持的请求方式 ·和普通MVC的Controller返回View不同,WebAPI直接返回“数据”,因为它的定位就是一个简单的数据服务,至于展现,全都丢给前端来完成。
30.WebService与WebAPl有什么区别?
在MVC中如何处理AJAX请求?
·在_Layout.cshtml中引入ajax脚本文件:<script src=*-/Sctipts/jquery unobtrusive-ajaxjs”></script>,然后选用以下两种方式之一来调用控制器的方法: ·表单模式:public static MvcForm BeginForm(AjaxHelper 扩展方法名,string动作名,object路由数据,AjaxOptions 选项) ·链接模式:@Ajax.ActionLink(“连接的文本”,“Action",“Controller”,new{Action参数名=”值"],new AjaxOptions{OnSuccess="Showlobs]) ·AjaxOptions的参数如下: >UpdateTargetid:服务器成功返回数据时,自动显示数据的HTML元素的ID >InsertionMode:自动显示服务器返回数据的位置(替换,前置,后置) >HttpMethod:Get、Post、Put、Delete >LoadingElementld:等待服务器响应时显示的HTML元素的ID >LoadingElementDuration:等待服务器响应的动画持续的时间 >Confirm:从JS向服务器提交请求之前弹出的对话框的文本 >OnBegin:从JS调用服务器时立刻执行的JS函数 >OnFailure:服务器返回错误信息时执行的JS函数>OnSuccess;服务器返回正确数据时执行的JS函数 ·控制器的函数返回JSON:return Json(list.JsonRequestBehavior.AllowGet); ·禁用延迟加载:DataContext.DeferredLoadingEnabled=false; ·避免循环依赖:DbContext.Configuration.ProxyCreationEnabled=false;
什么是MVC中的打包与压缩?
打包与压缩帮助我们减少一个页面的请求时间,从而提高页面执行性能。
MVC中如何执行打包?
在App_Start文件夹的BundleConfig.cs中,向RegisterBundles函数中添加你想打包的JS文件路径到打包集合。如下所示: bundles.Add(new ScriptBundle("~/Scripts/MyScripts")Include("-/Scripts/"js”) .合并后可以使用下面的代码去调用它:@SciptsRenderC~/scipts/MyScipts)
如何搞高打包性能?在debug模式下如何测试打包功能?
我们的项目总是需要CSS和脚本文件。打包帮助你合并多个Javascript 和css文件到单个文面入评论插入标布局编号件,从而最小化多个请求到一个请求。 例如,包含下面的web请求到一个页。这个页面要求两个Javascript文件,Javascriptl.js和Javascript2.js。当请求这个页面时,它要做三次请求: ·一个是Index页面。 ·两个请求是为了两个JavaScript文件:Javascript1.js和Javascript2js. ·如果页面中有大量的javascipt文件,这样会降低性能。如果我们可以合并所有的J5文件到后选用以下两种方式之一来调用 ·表单模式:public st一个文件,只请求一个,这将加增加性能。 ·如果你在debug模式下,你需要在bundleconfigc5中设置EnableOptimizations为true .否则你不会看到打包效果
代码压缩是如何执行的?压缩后有什么变化?
当你执行打包时,压缩会自动执行。它的执行步骤与打包一样。压缩功能通过移除空格、注 释等减少了脚本与CSS文件的大小
谈谈你对三层架构(3-tier application)的理解及与MVC的区别?
·三层架构(3-tier application)通常意义上的三层架构就是将整个业务应用划分为:表现层(UI/View)、业务逻辑层(BLL/Service)、数据访问层(DAL/Dao)。区分层次的目的即为了“高内聚,低耦合”的思想。 (1)表现层(U1):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。 (2)业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。 (3)数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增、删、改、查。 ·这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到一台机器上。 (1)表示层:位于最外层(最上层),离用户最近。用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。 (2)业务逻辑层(Busines Logic Layer)无疑是系统架构中体现核心价值的部分。它的关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(DOMain)逻辑有关,很多时候,也将业务逻辑层称为领域层。 (3)业务逻辑层:业务逻辑层在体系架构中的位置很关键,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是“无知”的,改变上层的设计对于其调用的底层而言没有任何影响。如果在分层设计时,遵循了面向接口设计的思想,那么这种向下的依赖也应该是一种弱依赖关系。因而在不改变接口定义的前提下,理想的分层式架构,应该是一个支持可抽取、可替换的“抽屉”式架构。正因为如此,业务逻辑层的设计对于一个支持可扩展的架构尤为关键,因为它扮演了两个不同的角色。对于数据访问层而言,它是调用者:对于表示层而言,它却是被调用者。依赖与被依赖的关系都纠结在业务逻辑层上,如何实现依赖关系的解耦,则是除了实现业务逻辑之外留给设计师的任务。 (4)数据访问层:有时候也称为是持久层,其功能主要是负责数据库的访问,可以访问数据库系统、二进制文件、文本文档或是XML文档。 (5)简单的说法就是实现对数据表的Select,Insert,Update,Delete的操作。如果要加入ORM的元素,那么就会包括对象和数据表之间的mapping,以及对象实体的持久化。 ·与MVC的区别: (1)MVC(模型Model-视图View-控制器Controller)是一种设计模式,我们可以用它来创建在域对象和Ul表示层对象之间的区分。 (2)同样是架构级别的,相同的地方在于他们都有一个表现层,但是他们不同的地方在于其他的两个层。 (3)在三层架构中没有定义Controler的概念。这是我认为最不同的地方。而MVC也没有把业务的逻辑访问看成两个层,这是采用三层架构或MVC搭建程序最主要的区别。当然了。在三层中也提到了Model,但是三层架构中Model的概念与Mc中Model的概金是不一样的,“三层”中典型的Model层是已实体类构成的,而c里,则是由业务逻辑与访问数据组成的。
19.ActionResult 和ViewResult有什么不同?
·ActionResult 是一个抽象类,ViewResult 衍生于ActionResult类。ActionResult有几种衍生类,例如:ViewResult,JsonResult,FilestreamResult等等。 ·ActionResult可以用来开发多态和动态动象,如果动态运行不同类型的视图,ActionResult是最好的选择。