我有一个数据库包装类,它建立与某些MongoDB实例的连接:
async connect(connectionString: string): Promise<void> {
this.client = await MongoClient.connect(connectionString)
this.db = this.client.db()
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个警告:
(node:4833)DeprecationWarning:不推荐使用当前的URL字符串解析器,将来的版本将删除它.要使用新的解析器,请将选项{useNewUrlParser:true}传递给MongoClient.connect.
该connect()方法接受一个MongoClientOptions实例作为第二个参数.但它没有一个叫做的属性useNewUrlParser.我还尝试在连接字符串中设置这些属性,如下所示:mongodb://127.0.0.1/my-db?useNewUrlParser=true但它对这些警告没有影响.
那么如何设置useNewUrlParser删除这些警告?这对我很重要,因为脚本应该以cron身份运行,而这些警告会导致垃圾邮件垃圾邮件.
我mongodb在版本中使用驱动程序3.1.0-beta4和相应的@types/mongodb包3.0.18.它们都是最新的可用npm install.
使用旧版本的mongodb驱动程序:
connect()
为了运行ASP.NET Core应用程序,我生成了一个dockerfile,它构建应用程序并在容器中复制源代码,Git使用Jenkins获取该代码.所以在我的工作区中,我在dockerfile中执行以下操作:
WORKDIR /app
COPY src src
Run Code Online (Sandbox Code Playgroud)
虽然Jenkins使用Git正确更新主机上的文件,但Docker不会将此应用于我的图像.
我建立的基本脚本:
#!/bin/bash
imageName=xx:my-image
containerName=my-container
docker build -t $imageName -f Dockerfile .
containerRunning=$(docker inspect --format="{{ .State.Running }}" $containerName 2> /dev/null)
if [ "$containerRunning" == "true" ]; then
docker stop $containerName
docker start $containerName
else
docker run -d -p 5000:5000 --name $containerName $imageName
fi
Run Code Online (Sandbox Code Playgroud)
我尝试不同的东西像--rm和--no-cache参数docker run,并停止/删除容器之前,新的一个是建立.我不确定我在这里做错了什么.似乎docker正在更新图像,因为调用COPY src src会导致图层ID并且没有缓存调用:
Step 6 : COPY src src
---> 382ef210d8fd
Run Code Online (Sandbox Code Playgroud)
更新容器的推荐方法是什么?
我的典型场景是:应用程序在Docker容器中的服务器上运行.现在部分应用程序已更新,例如通过修改文件.现在容器应该运行新版本.Docker似乎建议构建一个新的映像而不是修改现有的容器,所以我认为像我这样重建的一般方法是正确的,但实现中的一些细节必须得到改进.
我使用以下教程使用MySQL创建了一个ASP.NET EF应用程序:http://www.asp.net/identity/overview/getting-started/aspnet-identity-using-mysql-storage-with-an-entityframework-mysql -provider它的工作但我不喜欢在MySqlInitializer类中设置我的数据库名称,在以下片段中称为myDatabaseName:
var migrationHistoryTableExists = ((IObjectContextAdapter)context).ObjectContext.ExecuteStoreQuery<int>(
string.Format(
"SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '{0}' AND table_name = '__MigrationHistory'",
"myDatabaseName"));
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来动态地从DbContext获取数据库的名称,以便我只将数据库名称存储在连接字符串中,而不是第二次存储在MySqlInitializer中.但我找不到该名称的任何属性,无论是在DbContext还是在DbContext的Database-attribute中.
在ASP.NET Core应用程序中,我想创建某些角色作为管理不同用户权限的基础.遗憾的是,文档告知详细说明如何使用自定义角色,例如在控制器/操作中,而不是如何创建它们.我发现我可以使用RoleManager<IdentityRole>此实例,当实例在应用程序中注册其定义的和ASP.NET Core身份时,会自动注入到控制器构造函数中.
这让我添加一个这样的自定义角色:
var testRole = new IdentityRole("TestRole");
if(!roleManager.RoleExistsAsync(testRole.Name).Result) {
roleManager.CreateAsync(testRole);
}
Run Code Online (Sandbox Code Playgroud)
它在数据库中工作并创建角色.但是这种检查总是会在数据库上产生开销,调用特定的控制器/动作.所以我想在我的应用程序启动后检查一次,如果自定义角色存在并添加它们.ConfigureServicesStartup.cs中的方法似乎很适合.
但是:如何创建RoleManager<IdentityRole>类的实例呢?我想在这里使用最佳实践方法,而不是通过自己创建依赖实例来解决这个问题,这似乎会导致很多工作,因为它没有很好的文档化,并且肯定不会遵循最佳实践,因为ASP.NET Core正在使用依赖注入这样的事情(这在我的意见中也是合理的).
换句话说:我需要在控制器之外使用依赖注入.
我在ASP.NET核心控制器中得到一个日期,如下所示:
public class MyController:Controller{
public IActionResult Test(DateTime date) {
}
}
Run Code Online (Sandbox Code Playgroud)
该框架能够解析日期,但只能以英文格式.当我通过04.12.2017作为日期参数时,我的意思是2017年12月4日.这将被解析为英文日期,所以我的日期对象获得2017年4月12日的价值.我尝试仅使用这篇文章添加德语,并且这个,但没有成功.
ASP.NET Core需要做什么才能以正确的德语格式自动解析日期?
更新 I尝试设置RequestLocalizationOptions
services.Configure<RequestLocalizationOptions>(opts =>
{
var supportedCultures = new[]
{
new CultureInfo("de-DE"),
};
opts.DefaultRequestCulture = new RequestCulture("de-DE");
// Formatting numbers, dates, etc.
opts.SupportedCultures = supportedCultures;
// UI strings that we have localized.
opts.SupportedUICultures = supportedCultures;
});
Run Code Online (Sandbox Code Playgroud)
还是行不通.我打电话给example.com/Test?date=12.04.2017并在我的调试器中得到了这个:
public IActionResult Test(DateTime date) {
string dateString = date.ToString("d"); // 04.12.2016
string currentDateString = DateTime.Now.ToString("d"); // 14.01.2016
return Ok();
}
Run Code Online (Sandbox Code Playgroud) 我有一个我的内容模型:
class BaseModel {
public virtual string Content{ get; set; }
// ...
}
Run Code Online (Sandbox Code Playgroud)
要仅显示数据,上面的模型就可以了.但我想添加编辑内容的功能.所以我需要为成员内容添加一个属性- 但这只应该在autor按下编辑按钮时发生,而不是在内容的常规视图中.
所以我创建了第二个继承BaseModel的模型,以便我可以用我的属性覆盖成员:
class EditableBaseModel : BaseModel {
[UIHint("MyEditor"), AllowHtml]
public override string Content{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,但由于继承,EF会创建一个额外的列鉴别器.它包含类的类型作为字符串.在我的情况下,它始终是BaseModel,因为我总是将EditableBaseModel转换为BaseModel,然后将它保存到数据库,如下所示:
myBbContextInstance.BaseModels.Add(editableBaseModelInstance as EditableBaseModel);
Run Code Online (Sandbox Code Playgroud)
因此,鉴别器列是浪费空间,我想删除它.我发现这可以使用NotMapped属性来完成.但是当我尝试保存模型时,这将导致以下异常:
无法找到EntityType'EditableBaseModel'的映射和元数据信息.
似乎NotMapped属性将让EF知道存在从BaseModel继承的另一个类,但EF不会获得有关此类的任何信息.但那不是我想要的.我需要告诉EF:EditableBaseModel不应该关心它,因为它只适合我的视图,并且永远不会用于数据库.
我怎样才能做到这一点?我发现的唯一方法是手动将EditableBaseModel实例转换为BaseModel对象,如下所示:
public ActionResult Save(EditableBaseModel editableBaseModel) {
var baseModel = new BaseModel() {
Content = editableBaseModel.Content
// ...
};
myDbContextInstance.BaseModels.Add(baseModel); …Run Code Online (Sandbox Code Playgroud) c# asp.net inheritance entity-framework entity-framework-mapping
ASP.NET Core 默认使用类似http:// localhost:5000/DashboardSettings/Index的CamelCase-Routes .但我想使用小写路由,这些路由由破折号分隔:http:// localhost:5000/dashboard-settings/index它们更常见且一致,因为我的应用程序扩展了一个运行Wordpress的网站,该网站也有小写网址破折号.
我了解到我可以使用路由选项将URL更改为小写:
services.ConfigureRouting(setupAction => {
setupAction.LowercaseUrls = true;
});
Run Code Online (Sandbox Code Playgroud)
这有效,但给了我网址没有任何分隔符,如http:// localhost:5000/dashboardsettings/index,这些分隔符很难读.我可以使用路由属性来定义自定义路由
[Route("dashboard-settings")]
class DashboardSettings:Controller {
public IActionResult Index() {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
但这会导致额外的工作并且容易出错.我更喜欢一个自动解决方案,它搜索大写字符,在它们之前插入一个破折号并使大写字母小写.对于旧的ASP.NET来说,这不是一个大问题,但在ASP.NET Core上,我看不到如何处理这个问题的方向.
这是怎么做到这里的?我需要一些接口,我可以生成url(比如标记帮助器)并用dash-delimiters替换CamelCase.然后我需要另一种接口用于路由,以便将破折号分隔符URL转换回CamelCase,以便与我的控制器/动作名称正确匹配.
我只是想在docker-compose文件中限制一些Docker容器的资源.原因很简单:主机上运行多个应用程序/服务.所以我想避免,单个容器可以使用例如所有内存,这会损害其他容器.
从我学到的文档中,可以使用这个来完成resources.但这已经超越了deploy.所以我必须编写我的docker-compose文件,如下例所示:
php:
image: php:7-fpm
restart: always
volumes:
- ./www:/www
deploy:
resources:
limits:
memory: 512M
Run Code Online (Sandbox Code Playgroud)
这给了我警告:
警告:某些服务(php)使用'deploy'键,将被忽略.Compose不支持部署配置 - 用于
docker stack deploy部署到群组.
这似乎是正确的:docker stats确认,容器能够使用来自主机的所有ram.
文件说:
指定与部署和运行服务相关的配置.这仅在使用docker stack deploy部署到swarm时生效,并且被docker-compose up和docker-compose run忽略.
但我不需要聚类.似乎没有其他方法可以使用docker composer文件来限制资源.为什么不能指定某种类型的memory标签,比如start-parameter docker run?
例: docker run --memory=1g $imageName
这适用于单个容器.但是我不能使用它(至少在没有违反清晰的关注点的情况下),因为我需要使用两个不同的容器.
我发现,我可以mem_limit在从版本3降级到版本2(放在version: '2'顶部)之后直接使用.但我们目前使用的是版本3.1,因此这不是一个长期的解决方案.文档说,这deploy.resources是v2标签的新替代品mem_limit.
有一天,版本2已被弃用.因此,对于最新版本,资源管理是不可能的,至少没有一个群体?对我来说似乎在恶化,不能相信这个......
我的主题有某种面包屑.控制器始终是类别.为了避免重复我自己,我想在控制器的构造函数中为所有操作设置它,如下所示:
class MyController:Controller{
public MyController() {
ViewBag.BreadcrumbCategory = "MyCategory";
}
}
Run Code Online (Sandbox Code Playgroud)
当我ViewBag.BreadcrumbCategory在布局视图中访问时,它为null.在一个行动中它起作用:
class MyController:Controller{
public IActionResult DoSomething() {
ViewBag.BreadcrumbCategory = "MyCategory";
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道在构造函数中设置ViewBag属性是不可能的?在执行此工作的每个操作上调用函数将是令人烦恼且没有好的做法.在使用构造函数的另一个问题是一个被接受的answear,但正如我所说,这不起作用,至少对于ASP.NET Core.
我制作了一个像这里描述的Angular2应用程序.它有两个组件(A,B),由全局导入app.module.我的想法是,包含共享模块app.module,所以我不需要用冗余代码搞乱每个模块.我想以此为例FormsModule.所以在app.module我有
imports: [
UniversalModule,
CommonModule,
FormsModule,
AModule
RouterModule.forRoot([])
],
exports: [FormsModule]
Run Code Online (Sandbox Code Playgroud)
但是在A模块中,我得到了异常Can't bind to 'ngModel' since it isn't a known property of 'select'.,这似乎是由于缺失造成的FormsModule.它只有在我FormsModule使用时导入每个子模块时才有效imports: [FormsModule].这正是我想要避免的.
根据这个问题,我试图导入AppModule子模块A.这不起作用,并给我例外Exception: Call to Node module failed with error: Error: Unexpected value 'undefined' imported by the module 'AModule'
如何继承子模块的导入?我也需要这个用于管道.
asp.net-core ×5
c# ×4
asp.net ×3
docker ×2
angular ×1
asp.net-mvc ×1
dockerfile ×1
express ×1
git ×1
inheritance ×1
jenkins ×1
linux ×1
mongodb ×1
mongoose ×1
mysql ×1
node.js ×1
razor ×1
routing ×1
typescript ×1
url ×1
user-roles ×1