有谁知道如何用angular-cli完成这个?我希望能够在构建期间将baseHref路径存储在环境变量中/src/environments/environment.x.ts并基于所选环境,能够设置baseHref路径.
像这样的东西:
environment.ts
export const environment = {
production: false,
baseHref: '/'
};
Run Code Online (Sandbox Code Playgroud)
environment.prod.ts
export const environment = {
production: true,
baseHref: '/my-app/'
};
Run Code Online (Sandbox Code Playgroud)
然后打电话给...
ng build --prod
Run Code Online (Sandbox Code Playgroud)
...并让我的/dist/index.html文件显示<base href="/my-app/">.
我想也许如果我将我的环境变量命名为与构建命令中--base-href使用的构建选项相同,cli可能会选择它,但也没有骰子.
有没有办法从命令行引用环境变量?有点像ng build --base-href environment.baseHref?
就像主题说我有一个listview,我想添加Ctrl+ Aselect all快捷方式.我的第一个问题是我无法弄清楚如何以编程方式选择列表视图中的所有项目.它似乎应该相对容易,比如ListView.SelectAll()或ListView.Items.SelectAll(),但似乎并非如此.我的下一个问题是如何定义键盘快捷键ListView.我是否在某个KeyUp活动中这样做,但那你怎么一次检查两台印刷机?或者它是你设置的属性?
这里的任何帮助都会很棒.
作为旁注,我理解整个模糊的控制器名称问题,并使用命名空间来使我的路由工作,所以我不认为这是一个问题.
到目前为止,我有我的项目级控制器,然后是一个具有以下注册的用户区:
public class UserAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "User";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"UserHome",
"User/{id}",
new { action = "Index", controller = "Home", id = 0 },
new { controller = @"Home", id = @"\d+" }
);
context.MapRoute(
"UserDefault",
"User/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
Run Code Online (Sandbox Code Playgroud)
"UserHome"路线在那里,所以我可以允许路线/User/5与/User/Home/Index/5看起来更清洁的IMO.
理想情况下我想使用Url.RouteUrl("UserHome", new { id = 5 }) …
UPDATE
我们最终与Acunetix团队的一些程序员进行了会面,他们意识到他们的代码中可能存在一些错误,这些错误导致它在扫描中显示为一个问题而不是实际问题.普遍的共识是忽略扫描结果并使用开箱即用的ASP.NET会话ID生成,因为它应该对我们的站点足够安全.
@Vasile Bujac,因为你的答案是唯一一个,并提到使用ASP.NET标准解决方案,我把它作为答案,但感谢大家的帮助.
我们在工作时使用Acunetix的Retina扫描仪对我们的应用程序进行安全扫描.它告诉我们,我们的会话ID不够随机且太可预测.我不确定ASP.NET默认情况下如何生成会话ID(我认为它仍然是GUID?),但我继续实现了扩展SessionIDManager类并重写CreateSessionID和Validate方法以使用Guid的方法正如本MSDN文章中所述.
虽然这使得它稍微随机,但仍然没有产生Acunetix的"期望"效果.我甚regenerateExpiredSessionId="true"至将属性添加到web.config并且没有任何效果.我有一种感觉,我可能需要刻意打电话Session.Abandon()来真正清除会话并获得一个新ID.问题是我必须在用户登录之前调用它,因为它是唯一一种知道用户正在开始新会话的防故障方式.所以我无法在会话中设置任何内容,直到下一页加载了Abandon方法的工作方式,这意味着中间页面不是很理想,但可以做到这一点.
有没有人经历过这个或成功实施过修复?
另外,仅仅是一个FYI,我们不使用成员资格/表单身份验证,我们只是在有人登录时创建一个新的自定义用户类,并将其保存在会话中供以后使用.
来自Acunetix的报告:
描述: 表现出低熵("随机性")的会话令牌通常容易受到预测攻击.不安全令牌可能是由于伪随机数生成器,基于时间的值,静态值或基于用户属性(用户名或用户ID)的值不足造成的.这意味着攻击者可以在短时间内监视应用程序并收集它创建的会话令牌后猜测有效的会话令牌.如果攻击者为另一个用户确定了有效的会话令牌,则可以查看,修改或删除任意用户的数据,而无需猜测受害者的用户名或密码.因此,推断有效会话令牌的能力使攻击者能够绕过登录页面并避免暴力破解帐户的需要.此外,即使受害者当前未登录到应用程序,静态令牌也可以使攻击者能够定位用户.这增加了攻击者可以攻击的受害者群.
会话令牌应使用强大的随机数生成器创建,并从大量数字中收集.例如,如果操作系统的rand()函数可以产生统计上均匀分布的32位值,那么它通常就足够了.会话令牌不佳是增量的,依赖于用户的帐户ID,仅使用时间戳,或具有其他高度确定性的信息.保护会话令牌安全性的其他方法是始终通过SSL传输它们,在一段时间后自动使令牌到期,并在用户退出应用程序时显式使令牌到期.
建议:如果会话值表现出强烈的随机性,但是从一小部分值中选择,则攻击者更有可能简单地猜测一个有效的令牌.通过实现几种互补技术,可以改进Web应用程序的会话管理:
最近在我开发的应用程序中,我一直在检查受插入,更新,删除数据库影响的行数,如果数字是意外的,则记录错误.例如,如果从ExecuteNonQuery()调用返回任何数量的行而不是一行的简单插入,更新或删除一行,我将认为是错误并记录它.此外,我现在意识到,当我键入此内容时,如果发生这种情况,我甚至不会尝试回滚事务,这不是最佳做法,应该明确解决.无论如何,这里的代码来说明我的意思:
我将有一个数据层函数来调用db:
public static int DLInsert(Person person)
{
Database db = DatabaseFactory.CreateDatabase("dbConnString");
using (DbCommand dbCommand = db.GetStoredProcCommand("dbo.Insert_Person"))
{
db.AddInParameter(dbCommand, "@FirstName", DbType.Byte, person.FirstName);
db.AddInParameter(dbCommand, "@LastName", DbType.String, person.LastName);
db.AddInParameter(dbCommand, "@Address", DbType.Boolean, person.Address);
return db.ExecuteNonQuery(dbCommand);
}
}
Run Code Online (Sandbox Code Playgroud)
然后业务层调用数据层函数:
public static bool BLInsert(Person person)
{
if (DLInsert(campusRating) != 1)
{
// log exception
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
在代码隐藏或视图中(我同时执行webforms和mvc项目):
if (BLInsert(person))
{
// carry on as normal with whatever other code after successful insert
}
else
{
// throw an exception that directs …Run Code Online (Sandbox Code Playgroud) 正如MSDN所证实的那样,在EF 5及其中,DbContext类是"工作单元和存储库模式的组合".在我构建的Web应用程序中,我倾向于在现有的DbContext类之上实现Repository和Unit-Of-Work模式.最近,和其他许多人一样,我发现这在我的场景中有点过分.我并不担心从SQL Server中改变的底层存储机制,虽然我很欣赏单元测试带来的好处,但在实际应用程序中实现它之前,我仍然需要了解很多东西.
因此,我的解决方案是直接使用DbContext类作为Repository和Unit-Of-Work,然后使用StructureMap将每个请求的一个实例注入到各个服务类中,从而允许它们对上下文进行操作.然后在我的控制器中,我注入了我需要的每个服务,并相应地调用每个动作所需的方法.此外,每个请求都包含在请求开始时从DbContext创建的事务中,如果发生任何类型的异常(无论是EF错误还是应用程序错误),还是回滚,如果一切正常则返回.下面是一个示例代码方案.
此示例使用Northwind示例数据库中的Territory和Shipper表.在此示例管理控制器中,同时添加了区域和出货单.
调节器
public class AdminController : Controller
{
private readonly TerritoryService _territoryService;
private readonly ShipperService _shipperService;
public AdminController(TerritoryService territoryService, ShipperService shipperService)
{
_territoryService = territoryService;
_shipperService = shipperService;
}
// all other actions omitted...
[HttpPost]
public ActionResult Insert(AdminInsertViewModel viewModel)
{
if (!ModelState.IsValid)
return View(viewModel);
var newTerritory = // omitted code to map from viewModel
var newShipper = // omitted code to map from viewModel
_territoryService.Insert(newTerritory);
_shipperService.Insert(newShipper);
return RedirectToAction("SomeAction");
}
}
Run Code Online (Sandbox Code Playgroud)
领土服务
public class TerritoryService …Run Code Online (Sandbox Code Playgroud) 好吧,我试过寻找这个答案,但没有运气.我工作的SQL Server上有大约50个数据库,我几乎每天都要检查一下,看看是否可以通过缩小来释放任何空间.我们的驱动器往往会填满很多,所以这就是为什么它几乎是日常工作的原因.
有没有快速的方法来检查哪些数据库实际上有可用的可用空间?有谁知道系统/自定义存储过程或系统视图可以生成每个数据库的列表以及可以在该数据库上缩小多少可用空间?
顺便说一下,使用sql server 2005.
我正在使用SQL Server数据层应用程序来控制数据库的源代码.我在Visual Studio中创建了SQL Server数据库项目,现在正在通过PowerShell自动部署DACPAC.在使用DacFx服务部署方法测试部署选项时,我一直在使用部署选项,特别是BlockWhenDriftDetected.
现在,根据我的理解,在将所述数据库部署并注册为数据层应用程序之后,在SQL Server中向外部部署的数据库添加某种类型的SQL Server对象(表,函数,sproc等)时会发生数据库偏移.说服务器.正如我已经测试过的那样,这种漂移检测似乎有点不对劲.
当我第一次部署/注册DACPAC时,当然一切都很好,并且没有漂移.但是,如果我唯一更改的是VS中我的数据库项目属性中的版本号,重建项目,然后尝试使用DacFx重新部署DACPAC文件,它会检测数据库漂移.
要部署我的DACPAC,我使用以下powershell代码:
Add-Type -Path "C:\Program Files (x86)\Microsoft SQL Server\120\DAC\bin\Microsoft.SqlServer.Dac.dll"
$dacservices = New-Object Microsoft.SqlServer.Dac.DacServices "server=(localdb)\v11.0;trusted_connection=true;"
$dacpac = [Microsoft.SqlServer.Dac.DacPackage]::Load("C:/Projects/Sample/DacProject/bin/Debug/MyDatabase.dacpac")
$deployOptions = New-Object Microsoft.SqlServer.Dac.DacDeployOptions
$deployOptions.RegisterDataTierApplication = $true;
$deployOptions.BlockWhenDriftDetected = $true;
$dacservices.Deploy($dacpac, "MyDatabase", $true, $deployOptions)
Run Code Online (Sandbox Code Playgroud)
更新版本号并重建后再次运行上面的代码,我将得到漂移检测错误:
Exception calling "Deploy" with "4" argument(s): "Could not deploy package.
Error SQL0: Database has drifted from its registered data-tier application.
Run Code Online (Sandbox Code Playgroud)
另外,当我检查数据库漂移时,让事情更加混乱......
Write-Host $dacservices.GenerateDriftReport("MyDatabase")
Run Code Online (Sandbox Code Playgroud)
我得到一份空报告,意思是一切都应该没问题:
<DriftReport xmlns="http://schemas.microsoft.com/sqlserver/dac/DriftReport/2012/02">
<Additions />
<Removals />
<Modifications />
</DriftReport>
Run Code Online (Sandbox Code Playgroud)
这是一个错误还是我错过了什么?我很想忽略整个漂移检测并强制严格访问生产数据库,试图在事后限制变化.任何帮助将不胜感激.
谢谢.
powershell dacpac sql-server-data-tools sql-server-data-project
我正在开发的网站的要求是它必须符合508.目前,我们的大多数html视图都以标题开头,h1然后是该视图中需要的任何内容.现在对于表单,建议在处理可访问性时使用fieldsets和legends,以及其他众多指南.这使事情变得有点复杂,因为它h1是内容的标题,但如果我必须使用a fieldset和传奇,现在我有一个h1标题,但传说标题几乎是相同的东西.例如:
<h1>Edit Education Details</h1>
<form>
<fieldset>
<legend>Edit Education Details</legend>
<p>
<label for="school">School</label>
<input id="school" name="school" type="text"/>
</p>
...other fields
</fieldset>
</form>
Run Code Online (Sandbox Code Playgroud)
我不确定要走哪条路.我应该摆脱h1传奇风格和风格一样h1吗?或者,我是否应该使用图例文字进行创作,以使它们不是完全相同的文本?提前致谢.
我的数据库中有一个多对多关系设置,如下所示:
User
-------
Id (PK, Identity)
First
Last
...various other fields
Skill
-------
Id (PK, Identity)
Description
UserSkill
-----------
UserId (PK, FK on User.Id)
SkillId (PK, FK On Skill.Id)
Run Code Online (Sandbox Code Playgroud)
当我在 DbContext 上运行此 LINQ 查询时:
from u in Users
from s in u.Skills
where s.Id == 5
select new
{
u.Id,
s.Description
})
Run Code Online (Sandbox Code Playgroud)
生成的 SQL 包含所有内部联接,这就是我想要的:
SELECT
[Extent1].[UserId] AS [UserId],
[Extent2].[Description] AS [Description]
FROM [dbo].[UserSkill] AS [Extent1]
INNER JOIN [dbo].[Skill] AS [Extent2] ON [Extent1].[SkillId] = [Extent2].[Id]
WHERE 5 = [Extent2].[Id]
Run Code Online (Sandbox Code Playgroud)
但是,当我添加一个简单的额外 …
c# linq linq-to-entities linq-query-syntax entity-framework-5
c# ×5
asp.net ×2
.net ×1
angular ×1
angular-cli ×1
asp.net-mvc ×1
dacpac ×1
dbcontext ×1
forms ×1
linq ×1
listview ×1
powershell ×1
sessionid ×1
shrink ×1
sql-server ×1
transactions ×1
url-routing ×1