小编rya*_*lit的帖子

使用ng build从环境变量设置基本href

有谁知道如何用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

angular-cli angular

27
推荐指数
2
解决办法
2万
查看次数

将选择所有快捷方式(Ctrl + A)添加到.net列表视图?

就像主题说我有一个listview,我想添加Ctrl+ Aselect all快捷方式.我的第一个问题是我无法弄清楚如何以编程方式选择列表视图中的所有项目.它似乎应该相对容易,比如ListView.SelectAll()ListView.Items.SelectAll(),但似乎并非如此.我的下一个问题是如何定义键盘快捷键ListView.我是否在某个KeyUp活动中这样做,但那你怎么一次检查两台印刷机?或者它是你设置的属性?

这里的任何帮助都会很棒.

.net c# listview keyboard-shortcuts

19
推荐指数
3
解决办法
2万
查看次数

将Url.RouteUrl()与区域中的路径名称一起使用

作为旁注,我理解整个模糊的控制器名称问题,并使用命名空间来使我的路由工作,所以我不认为这是一个问题.

到目前为止,我有我的项目级控制器,然后是一个具有以下注册的用户区:

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 }) …

url-routing asp.net-mvc-routing asp.net-mvc-4

16
推荐指数
2
解决办法
4万
查看次数

会话ID不够随机 - ASP.NET

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的报告:

CWE-330 CAPEC-59 OWASP2007-A7

描述: 表现出低熵("随机性")的会话令牌通常容易受到预测攻击.不安全令牌可能是由于伪随机数生成器,基于时间的值,静态值或基于用户属性(用户名或用户ID)的值不足造成的.这意味着攻击者可以在短时间内监视应用程序并收集它创建的会话令牌后猜测有效的会话令牌.如果攻击者为另一个用户确定了有效的会话令牌,则可以查看,修改或删除任意用户的数据,而无需猜测受害者的用户名或密码.因此,推断有效会话令牌的能力使攻击者能够绕过登录页面并避免暴力破解帐户的需要.此外,即使受害者当前未登录到应用程序,静态令牌也可以使攻击者能够定位用户.这增加了攻击者可以攻击的受害者群.

会话令牌应使用强大的随机数生成器创建,并从大量数字中收集.例如,如果操作系统的rand()函数可以产生统计上均匀分布的32位值,那么它通常就足够了.会话令牌不佳是增量的,依赖于用户的帐户ID,仅使用时间戳,或具有其他高度确定性的信息.保护会话令牌安全性的其他方法是始终通过SSL传输它们,在一段时间后自动使令牌到期,并在用户退出应用程序时显式使令牌到期.

建议:如果会话值表现出强烈的随机性,但是从一小部分值中选择,则攻击者更有可能简单地猜测一个有效的令牌.通过实现几种互补技术,可以改进Web应用程序的会话管理:

  • 确保令牌值至少为32位,特别是对于具有大量并发用户和大量每日页面请求的应用程序.
  • 熵源的比特大小(随机值)比实际会话令牌的比特大小更重要.例如,MD5哈希值产生128位值.但是,增量值,时间戳或8位随机数的MD5哈希值都是不安全的,因为可以很容易地预测随机值的来源.因此,128位大小不代表会话令牌的准确度量.熵源的最小大小为32位,但对于每小时超过10,000个并发用户的站点,可能需要更大的池(48或64位).
  • 在大多数情况下,应用程序生成的令牌(例如,ASP.NET_SessionId,ASPSESSIONID,JSPSESSIONID,PHPSESSIONID)提供足够大的随机值以防止会话预测攻击.应用程序应使用这些会话管理算法,除非对自定义会话机制进行了彻底的审查和测试.
  • 使用服务器端对象跟踪与会话令牌关联的用户属性,以防止用户冒充攻击.如果应用程序没有严格地将用户的会话令牌与该用户的配置文件信息相关联,则攻击者可能能够通过操纵客户端值来查看任意信息.例如,如果应用程序设置强会话令牌,但基于"UserId"cookie执行SQL查询,则攻击者只需修改"UserId"cookie即可模拟其他人.如果将"UserId"值与服务器端会话对象相关联,则应用程序将更安全,因为攻击者无法修改该值.
  • 当用户退出应用程序或预定的不活动时间后,会话令牌到期.我们建议对会话令牌使用20分钟超时,但这在很大程度上取决于应用程序的类型和预期用法.

c# asp.net sessionid asp.net-session

10
推荐指数
1
解决办法
1万
查看次数

在数据库操作(插入,更新,删除)过度杀伤后检查受影响的行是否计数?

最近在我开发的应用程序中,我一直在检查受插入,更新,删除数据库影响的行数,如果数字是意外的,则记录错误.例如,如果从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)

c# sql-server asp.net

7
推荐指数
1
解决办法
1602
查看次数

在事务中使用DbContext SaveChanges

正如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)

c# asp.net-mvc transactions dbcontext entity-framework-5

7
推荐指数
1
解决办法
9407
查看次数

以编程方式确定数据库上的可用空间?

好吧,我试过寻找这个答案,但没有运气.我工作的SQL Server上有大约50个数据库,我几乎每天都要检查一下,看看是否可以通过缩小来释放任何空间.我们的驱动器往往会填满很多,所以这就是为什么它几乎是日常工作的原因.

有没有快速的方法来检查哪些数据库实际上有可用的可用空间?有谁知道系统/自定义存储过程或系统视图可以生成每个数据库的列表以及可以在该数据库上缩小多少可用空间?

顺便说一下,使用sql server 2005.

sql-server-2005 shrink

6
推荐指数
1
解决办法
3410
查看次数

DACPAC版本号更改导致漂移,但漂移报告为空

我正在使用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

6
推荐指数
0
解决办法
616
查看次数

辅助功能,字段集图例和标头标记

我正在开发的网站的要求是它必须符合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吗?或者,我是否应该使用图例文字进行创作,以使它们不是完全相同的文本?提前致谢.

forms accessibility

5
推荐指数
1
解决办法
1898
查看次数

强制内连接与多对多关系实体框架

我的数据库中有一个多对多关系设置,如下所示:

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

5
推荐指数
1
解决办法
2164
查看次数