我正在尝试从旧的静态AutoMapper API迁移到根据此资源执行的新方法.
但是,我对如何在Startup.cs/Global.asax等文件中配置AutoMapper感到困惑.
做这样的事情的旧方法是:
Mapper.Initialize(cfg => {
cfg.CreateMap<Source, Dest>();
});
Run Code Online (Sandbox Code Playgroud)
然后在整个代码中的任何地方,我可以简单地做:
var dest = Mapper.Map<Source, Dest>(source);
Run Code Online (Sandbox Code Playgroud)
现在使用新版本似乎无法在Application Start上初始化AutoMapper,然后在Controller中使用它.我弄清楚如何做到这一点的唯一方法是在控制器中执行所有操作:
var config = new MapperConfiguration(cfg => {
cfg.CreateMap<Source, Dest>();
});
IMapper mapper = config.CreateMapper();
var source = new Source();
var dest = mapper.Map<Source, Dest>(source);
Run Code Online (Sandbox Code Playgroud)
我现在在MVC控制器或我的应用程序中的任何其他地方使用它时,是否真的必须配置AutoMapper?是的,文档向您展示了如何以新的方式配置它,但它们只是将其设置为一个名为config的变量,该变量无法在我的整个应用程序中运行.
我找到了关于保持静态感觉的文档.但是我对MyApplication.Mapper是什么以及我应该在哪里声明它感到有点困惑.它似乎是一个全局应用程序属性.
我知道WEB API和MVC之间的区别.我也知道在asp.net core 1.0中只有一种类型的控制器可以同时处理MVC和API.
但是,我最近一直在观看很多ASP.NET MVC教程,并注意到教师在Controllers文件夹中创建了一个Api文件夹.
这样他就分出了主要处理ViewModel的所有MVC控制器,并使用View函数告诉MVC哪个视图要从主要处理Dtos的API控制器中显示,并且似乎严格处理数据,而不是视图.
您会认为在MVC应用程序中不会有API控制器吗?特别是因为在核心1.0中你继承了一个类:'Controller'.但是我想当你整合像Angular和Kendo UI这样的前端框架来制作很多ajax请求时,你通常希望通过api来完成它们.
这是我目前的理解:
严格使用MVC控制器仅用于MVC,例如指定应显示哪个视图以及传递视图模型.
使用API控制器主要用于ajax调用,从不用于视图初始加载,从不用于MVC CRUD模式.
在谈到这一点时,有人能给我一个更好的标准吗?
我的大部分功能都涉及检查某些内容是否存在。如果没有,我返回 HttpNotFound()。它们还涉及检查参数是否正确。如果不是,我返回 HttpBadRequest()。如果一切正常,我通常会返回 OK(dataGoesHere)。
但是,当使用 Try Catch 块并抛出错误时我应该做什么。在 Catch 中,我想简单地返回存在服务器错误。我见过一些 API 实际上也返回自定义消息。
看起来 ASP.NET 5 中的事情有很大不同。我无法像 Web api 2 中那样返回 BadRequest()、Conflict() 等。
我有一个场景,我需要在GET请求中向我的Web API发送多个ProductIds.
在我的asp.net web api控制器中有一种方法可以让我的Action方法的参数类型化List<int> productIds.我假设不,我必须像这样传递它们?ProductIds = 1,2,3然后接受它string productIds.
如果有更好的方法,请告诉我.
c# asp.net asp.net-web-api asp.net-web-api2 asp.net-core-1.0
我有一个剃刀视图,将包含5个表单.(A,B,C,D,E).这些表单中的每一个都有自己的ViewModel(AViewModel,BViewModel,CViewModel,DViewModel,EViewModel).
我创建了一个父ProductViewModel,该页面将用作唯一的ViewModel.在这个ViewModel中,将是页面上每个表单的所有其他ViewModel(如上所列).
以下是ProductViewModel的属性:
public AViewModel { get; set; }
public BViewModel { get; set; }
public CViewModel { get; set; }
public DViewModel { get; set; }
public EViewModel { get; set; }
Run Code Online (Sandbox Code Playgroud)
我的剃刀视图如下所示:
@model MVCApp.ViewModels.ProductViewModel
@{
ViewData["Title"] = "Product Detail";
}
<h2>Product Detail</h2>
<form asp-controller="A" asp-action="Save" data-ajax="true" data-ajax-method="POST">
<div class="form-horizontal">
<h4>Form A</h4>
<hr />
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="AViewModel.Name" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="AViewModel.Name" class="form-control"/>
<span asp-validation-for="AViewModel.Name" class="text-danger" />
</div>
</div>
<div class="form-group">
<label asp-for="AViewModel.StartDate" class="col-md-2 …Run Code Online (Sandbox Code Playgroud) 是否可以在没有实体框架和实体框架迁移的情况下使用 ASP.NET Identity?我的应用程序的其余部分将使用 Micro ORM 进行数据访问。但是,该应用程序使用内置的 ASP.NET 标识个人用户帐户。
我的目标是仍然能够使用内置的 UserManager 和 LoginManager 类,并另外检索使用 Micro ORM 的用户列表,并消除与 EF/Migrations 相关的任何事情。这可能吗?似乎并非如此,因为原始数据库结构是通过应用初始迁移创建的。
如果有人有这样做的好技术,请分享。
使用 dapper 的 QueryAsync 方法时,使用 connection.OpenAsync() 和 connection.Open() 有什么区别。
异步:
public async Task<IList<Product>> GetListAsync()
{
using (var connection = new SqlConnection(_connectionString))
{
StringBuilder sql = new StringBuilder();
sql.AppendLine("SELECT Id, Name ");
sql.AppendLine("FROM Product ");
await connection.OpenAsync();
var tickets = await connection.QueryAsync<Ticket>(sql.ToString());
return tickets.ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
非异步:
public async Task<IList<Product>> GetListAsync()
{
using (var connection = new SqlConnection(_connectionString))
{
StringBuilder sql = new StringBuilder();
sql.AppendLine("SELECT Id, Name ");
sql.AppendLine("FROM Product ");
connection.Open();
var tickets = await connection.QueryAsync<Ticket>(sql.ToString());
return tickets.ToList();
}
}
Run Code Online (Sandbox Code Playgroud) 最新的ASP.NET Core 2.0模板没有bower配置或packages.json,但附带了客户端软件包,如bootstrap和jquery.我们如何从这里接管并管理这些包.前面的模板很简单,只需使用项目附带的bower配置来维护客户端软件包.
截至目前,我一直在删除lib文件夹中的所有内容,手动创建packages.json或bower配置并重新安装.我在这里错过了什么吗?为什么他们不会为预先安装的软件包配置文件启动,特别是因为预安装的客户端库是从bower安装的.
asp.net bower asp.net-core-mvc asp.net-core asp.net-core-2.0
尝试将使用Maven pom文件和一个.project文件从头开始制作的现有项目导入到IntelliJ中后,将它们与Eclipse中的图表一起使用到IntelliJ中,这是一堆.settings文件夹,bin目录(src,target,pom)和.project具有以下内容的文件:
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>xyz</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
</projectDescription>
Run Code Online (Sandbox Code Playgroud)
请注意,在进行导入之前,由于在Eclipse中使用图表,因此在我的目录中确实有一个.project文件。
知道发生了什么吗?以及自IntelliJ导入以来,VSCode为何不断自动生成所有这些随机数据。
我习惯于只使用我的Pom文件。
我正在使用FlexBox为Web应用程序创建布局.请注意,我不是为了这个而尝试使用bootstrap.我只想在普通的flexbox css中做到这一点.
这是我想要的结构:
第1行:固定标题,高64像素.第2行:修复了侧面占据250px左侧的固定侧面,固定内容占据了右侧的剩余部分.
<div id="row1">
<div class="header"></div>
</div>
<div id="row2">
<div class="sidenav"></div>
<div class="main-content"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
这里的关键是sidenav和main-content应该都是100%的屏幕,并带有自己的滚动条.实际的浏览器滚动条不应该水平或垂直显示.
asp.net ×7
c# ×7
asp.net-core ×5
asp.net-mvc ×2
automapper ×1
bower ×1
css ×1
css3 ×1
dapper ×1
flexbox ×1
html ×1
java ×1
javascript ×1
maven ×1
razor ×1
sql-server ×1