15 Essential ASP.. NET MVC面试问题 *
total source的基本问题是最好的ASP.NET MVC开发人员和工程师可以回答. 在我们社区的推动下,我们鼓励专家提交问题并提供反馈.
Hire a Top ASP.NET MVC Developer NowInterview Questions
ORM是一个对象关系映射框架. 这样的框架可以帮助减少典型web应用程序中手写代码的数量. 当应用程序对性能没有极端要求时,可以使用ORM, 但是有一些框架(例如.g.即使在高负载系统中也可以使用.
You have a CategoriesController
and an Add
下一个签名是这样的:
[HttpPost]
public IActionResult添加(NewCategoryModel模型)
你必须显式地指定参数 model
应该从请求体中提取吗. How would you achieve that?
Add [FromBody]
like so:
[HttpPost]
public IActionResult Add([FromBody]NewCategoryModel模型)
Is that OK to place a log.txt
file in the ~/bin/
folder of an ASP.NET MVC application? Will it affect the app?
将日志文件放在目录中不是一个好主意 bin
文件夹,因为每次更改都会导致池重新启动. 您将面临性能问题,除非您已经知道这一点, 追查原因将会很困难.
申请加入Toptal的发展网络
并享受可靠、稳定、远程 Freelance ASP.NET MVC Developer Jobs
ASP中有哪些基本的文件夹.NET project without Areas? What are they for? 他们有哪些子文件夹(如果适用)? 哪些文件夹是可公开访问的?
-
App_Data
可以用来存储一些应用程序的数据吗. -
App_Start
包含配置类:RouteConfig
,BundleConfig
, etc. -
Content
是一个公开访问的文件夹的静态文件,如CSS文件,图像等., but not scripts. -
Controllers
是应用程序控制器的默认文件夹吗. -
Scripts
是一个公开访问的文件夹的JavaScript文件. -
Views
:每个控制器对应一个文件夹,外加一个特殊文件夹Shared
用于多个视图/控制器使用的视图. 例如,如果我们有一个控制器叫做HomeController
, we will have aHome
子文件夹中包含了相关的所有视图HomeController
.
ASP中有哪些基本的文件夹.. NET Core项目使用的MVC模板没有area? What are they for? 他们有哪些子文件夹(如果适用)? 哪些文件夹是可公开访问的?
-
wwwroot
:站点的根目录, publicly accessible, 包含静态文件(CSS)的子文件夹, images, JS, etc.). -
Controllers
:应用控制器的默认文件夹 -
Views
:每个控制器对应一个文件夹,外加一个特殊文件夹Shared
用于多个视图/控制器使用的视图. 例如,如果我们有一个控制器叫做HomeController
, we will have aHome
子文件夹中包含了相关的所有视图HomeController
.
Model-View-Ccontroller是一种体系结构模式.其主要思想是将业务逻辑与应用程序的UI分离.
应用逻辑位于控制器中. 视图负责呈现适当的UI. 模型通常用于在控制器和视图之间来回传输数据. 有些人还使用它们来包装业务逻辑,与ORM工具共享模型. 但是,最好将模型仅用于传输数据(作为数据传输对象)和验证契约(通过使用数据注释属性标记模型的属性)。.
You have a controller CategoriesController
with actions ShowAll
, Add
, and Delete
. 你有几个与应用程序url相关的需求:
URL | Action | Method |
---|---|---|
~/v2/Categories | ShowAll | GET |
~/v2/Categories/Add | Add | POST |
~/v2/Categories/Delete | Delete | DELETE |
实现这一目标最简单的方法是什么?
In ASP.NET MVC 5:
在动作方法上使用自定义路由和属性来限制HTTP方法.
步骤1:我们需要添加一个自定义路由 RoutesCollection
(usually in ~/App_Start/RoutesConfig
) before the default one:
routes.MapRoute(
name: "v2",
url:“v2 /{控制器}/{行动}”,
默认值:new {action = "ShowAll"}
);
步骤2:为了限制操作的HTTP方法,我们需要标记 CategoriesController
的方法与属性 [HttpGet]
, [HttpPost]
, and [HttpDelete]
根据我们的要求.
In ASP.NET Core MVC:
有三种方法可以满足这些需求.
选项#1:在动作方法上添加自定义全局路由和属性来限制HTTP方法.
步骤1:我们需要添加一个自定义全局路由(通常在 Startup.cs
) before the default one:
routes.MapRoute(
name: "v2",
模板:“v2 /{控制器}/ {action = ShowAll}”
);
步骤2:为了限制操作的HTTP方法,我们需要标记 CategoriesController
的方法与属性 [HttpGet]
, [HttpPost]
, and [HttpDelete]
根据我们的要求.
对于没有特定URL模式需求的应用程序来说,这是一种很好的方法.
选项#2:在操作级别配置路由.
Steps:
- 用属性标记动作以限制允许的HTTP方法.
- 通过属性指定路由模板:
[HttpGet]
[Route("v2/[controller]")]
public IActionResult ShowAll()
{
return View();
}
[HttpPost]
(路线(“v2 /[控制]/[行动]”))
public IActionResult Add()
{
return View();
}
如果您对URL方案有特定的要求,这是一个很好的决定.g., a REST API.
选项#3:在控制器级别配置基本路由,在操作级别配置相对路由.
Steps:
- 指定一个带有属性的基本控制器路由模板.
- 用属性标记动作以限制允许的HTTP方法.
- 通过属性指定相关的路由模板:
[Route("v2/[controller]")]
公共类categorescontroller:控制器
{
[HttpGet]
[Route("")]
public IActionResult ShowAll()
{
return View();
}
[HttpPost]
[Route("[action]")]
public IActionResult Add()
{
return View();
}
// ...
如果您对URL方案有特定的需求,这也是一个很好的决定. In fact, 如果你总是用一个常量字符串或控制器名作为路由的前缀,那么它可能是一个比前一个更好的选择.
默认情况下,应用程序中有母版页 ~/Views/Shared/_Layout.cshtml
而你又创造了一个新的 ~/Views/Shared/_LayoutV2.cshtml
. 如何将新的母版页应用到整个应用程序中, 除了非默认布局的页面?
In both ASP.NET MVC 5 and ASP.. NET Core MVC,你要调整文件 ~/Views/_ViewStart.cshtml
.
In ASP.NET MVC 5:
@{
Layout = "~/Views/Shared/_LayoutV2 ..cshtml";
}
In ASP.NET Core MVC:
@{
Layout = "_LayoutV2";
}
您可以创建自定义异常筛选器来拦截和记录未处理的异常.
In ASP.NET MVC 5:
要在全局截获异常,应该注册过滤器 GlobalFilterCollection
(usually in ~/App_Start/FilterConfig
). Authentication, authorization, custom action filters, logging, 动作结果转换也可以用同样的方法来完成.
In ASP.NET Core MVC:
要在全局截获异常,应该注册过滤器 Startup.ConfigureServices()
as shown below:
services.AddMvc(options => { options.Filters.Add(new ApiExceptionFilter()); });
Authorization, 自定义动作过滤器(同步和异步), 动作结果转换也可以用同样的方法来完成.
The main advantages are:
- 每个对象的生命周期都可以由外部管理.
- 对象不负责创建服务和提供依赖关系.
- 依赖列表的更改不会影响使用该服务的对象.
- 同一个实例可以由几个不相关的消费者共享.
- 服务提供契约,因此将来可以更改实现.
生命周期应该与请求相同,因为请求通常不会存活很长时间. 在哪里可以将整个请求封装在一个事务中, 这有助于遵守ACID原则.
You have an ASP.. NET MVC应用程序,其中需要使用asp.net.. NET会话状态,并支持跨多个服务器运行. 在不编写自定义代码的情况下可以执行哪些额外的配置?
In the Web.config
file (在应用程序的根文件夹中) set sessionState
to StateServer
用于共享内存存储或 SQLServer
共享持久存储.
有几个答案,因为ASP.. NET Core是一个新平台,支持多种方法. 候选人必须强调这一点, in the project, 例如,我们需要使用某种分布式缓存, Redis. 此外,微软还提供了几个包来帮助实现这一点. In the case of Redis, Microsoft.Extensions.Caching.Redis 提供中间件和实现 IDistributedCache 提供一种标准化的方法来处理它.
异步操作不会阻塞正在执行的线程,如果它等待一个I/O操作. 如果使用异步操作模式进行I/O操作,则可以提高系统的吞吐量, 但它对cpu密集型操作没有帮助.
你有一个关于Razor c#语法的页面. 这两种方法的区别是什么? RenderAction
and RenderPartial
? What will they do?
@{
Html.RenderAction("Add");
Html.RenderPartial("Add");
}
RenderAction
将调用当前控制器的动作方法并内联呈现结果. In contrast, RenderPartial
将呈现指定的视图内联不调用任何操作方法.
面试不仅仅是棘手的技术问题, 所以这些只是作为一个指南. 并不是每一个值得雇佣的“A”候选人都能回答所有的问题, 回答所有问题也不能保证成为A级考生. At the end of the day, 招聘仍然是一门艺术,一门科学,需要大量的工作.
Why Toptal
厌倦了面试候选人? 不知道该问什么才能让你得到一份好工作?
让Toptal为你找到最合适的人.
Hire a Top ASP.NET MVC Developer Now我们的独家网络ASP.NET MVC Developers
提出面试问题
提交的问题和答案将被审查和编辑, 并可能会或可能不会选择张贴, 由Toptal全权决定, LLC.
Looking for ASP.NET MVC Developers?
Looking for ASP.NET MVC Developers? Check out Toptal’s ASP.NET MVC developers.
Joseph McNulty
Freelance ASP.NET MVC Developer
约瑟夫是一位具有很强领导才能的专业人士, 在软件工程方面有丰富经验, 专门研究航天领域的关键任务系统, defense, and telecommunications. 他在使用各种技术设计和开发复杂的企业web应用程序方面拥有超过20年的经验, most recently with ASP.NET MVC.
Show MoreIvan Sedlak
Freelance ASP.NET MVC Developer
Ivan拥有超过12年的专业实践经验,使用了广泛的微软技术, 主要针对企业web应用, security, internet, and serverless functions. 他以前的职位是在一家私营公司做高级职员 .. NET全栈开发人员、软件架构师和团队负责人. 他主要从事大型项目. Ivan自2015年以来一直与Toptal客户合作.
Show MoreToptal Connects the Top 3% 世界各地的自由职业人才.
Join the Toptal community.