小编Hac*_*ese的帖子

MVC @RenderSection"部分已定义,但尚未呈现"脚本.当多个级别的页面

我正在使用MVC v4.
我有一个'_BootstrapLayout'页面,它定义了所有的twitter bootstrap等东西,一个定义网站布局的主页面,导航栏等,以及从主页面继承的网站页面.

_BootstrapLayout.cshtml

_MainPage.cshtml @ {Layout ="〜/ Views/Shared/_BootstrapLayout.cshtml"; }

Index.cshtml @ {Layout ="〜/ Views/Shared/_MainPage.cshtml";}

所以主页 - >主页 - >网站页面

_BootstrapLayout页面包含脚本的渲染

@RenderSection("scripts", required: false)
Run Code Online (Sandbox Code Playgroud)

我想在Index.cshtml页面添加一个脚本部分,但是当我这样做时,我得到了异常

@section scripts {
    <script type="text/javascript">

        $(document).ready(function () {
...

        });

    </script>
}
Run Code Online (Sandbox Code Playgroud)

以下部分已定义,但尚未针对布局页面"〜/ Views/Shared/_MainPage.cshtml":"scripts"进行渲染.

所以我在_MainPage.cshtml中添加了一个空的@section脚本,仍然是同样的问题?即使我将代码添加到_MainPage脚本部分,我仍然会得到相同的错误.无论我在@MainPage中放置@section,仍然会得到相同的错误.

如果我故意不关闭该部分(即删除}),那么我得到一个错误,表明该部分是不正确的,所以它正在解析_MainPage中的部分.

在这种情况下,如何让网站页面上的脚本的@RenderSections工作?

c# asp.net-mvc razor asp.net-mvc-4

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

IE8在弹出窗口中丢失会话cookie

我们有一个使用Forms Auth的ASP.NET应用程序.用户登录时,会生成会话ID cookie和Forms Auth票证(存储为cookie).这些是会话cookie,而不是永久性cookie.当浏览器关闭时,用户有效地退出是有意和可取的.

用户登录后,会弹出一个新窗口window.open('location here');.打开的页面实际上是用户在其余会话期间工作的工作空间.在此页面中,还使用了其他弹出窗口.

最近,我们有许多客户(都使用最新版本的IE8)抱怨说,当他们登录时,初始弹出窗口会将他们带回登录屏幕而不是他们的主页.或者,用户有时可以登录,进入主页(再次,在新的弹出窗口中),这一切似乎都很好,直到创建任何其他弹出窗口,它开始将它们重定向到登录屏幕再次.

在尝试解决问题时,我使用了好老的提琴手.当问题开始显现时,我注意到浏览器没有发送ASP.NET会话ID会话cookie或Forms Auth票证会话cookie,即使对POST中的日志的响应明显压低了这些cookie.

更奇怪的是,如果我从CTRL + N打开一个缺少会话cookie的弹出窗口的新窗口,然后手动输入主页的URL,那些cookie会再次神奇地出现.但是,后续window.open();调用将继续被打破,不会发送会话cookie并将用户带到登录屏幕.

重要的是要注意,有时,由于看似没有充分的理由,这些相同的用户可以突然登录并正常工作一段时间,然后它又回到破碎状态.

现在,我确保没有浏览器插件,插件,工具栏等正在运行.我已将我们的网站添加为可信站点并将安全设置删除为低,我已将Cookie隐私策略修改为"全部接受",甚至禁用自动策略设置,手动强制它接受所有内容并包含会话cookie.似乎没有任何影响它.

另请注意,Web应用程序驻留在单个服务器上.没有负载平衡,网络花园,服务器群,集群等.服务器确实驻留在ISA服务器后面,但除此之外,它非常简单.

我一直在寻找几天,但没有发现任何可行的事情.哎呀,有时我甚至无法可靠地重现它.我找到了一些提到同样问题的人,但他们似乎引用了一个据称在测试版或RC版中修复的问题(例如:IE8在重定向后打开新窗口时丢失了cookie).这些是IE的发布版本,带有最新的补丁.

我知道我可以尝试设置永久性cookie而不是会话cookie.但是,这对我们的应用程序具有严重的安全隐患.

更新

当用户在计算机上添加为本地管理员时,似乎问题会自动消失.只有时间会证明这种变化是否会永久(并且积极地)影响这个问题.

是时候破坏ProcMon并查看是否存在资源访问问题.

更新#2

似乎存在多个角度似乎是一个单一的问题.我很久以前就报告说,让用户成为本地管理员似乎有所帮助.对于许多用户来说,它确实如此.当然,这不是一个真正的解决方案,但确实让我们蹒跚而行.

然后更多用户开始报告此问题,而管理员修复没有帮助.用户似乎主要是Win7,但Vista也受到了影响.它们似乎也主要是64位安装.

按照以下一些成员的建议将TabProcGrowth设置为0或1(任一工作)似乎已基本解决了这个问题.所以,我将把我接受的答案移到第一个提出这个问题的人那里,因为它有更大的影响力.

这是一个令人难以置信的尝试解决问题,因为它很难复制,并且经常发生在我没有直接通信的用户身上,或者当我到达它们时它似乎没有起作用.我只能说会话合并功能是不对的,但我没有太多数据可以提供给微软来寻找永久修复.

cookies popup internet-explorer-8

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

文件夹浏览器对话框,如打开文件

请参阅下面的快照.这取自Visual Studio 2008中的"新项目创建"工作流程.

该窗口用于选择将存储项目的文件夹.如何在c#应用程序中创建类似的窗口?

在此输入图像描述

c# winforms

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

Parallel.ForEach Debug或Step Through

有没有一种简单的方法可以逐步完成parallel.foreach?使用断点调试此方法的最佳方法是什么?

c# debugging parallel.foreach

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

如何使用Owin中间件拦截404

背景

首先让我解释一下背景.我正在研究一个项目,该项目试图将使用通过IIS上托管的OWIN配置的Web API的后端服务器结合起来,但未来可能还有其他OWIN支持的主机 - 使用AngularJS的前端.

AngularJS前端完全是静态内容.我完全避免服务器端技术,如MVC/Razor,WebForms,Bundles,任何与前端及其使用的资产有关的技术,而是推迟使用Node.js,Grunt/Gulp等最新最好的技术.处理CSS编译,捆绑,缩小等等.由于我不会进入这里的原因,我将前端和服务器项目保存在同一个项目中的不同位置(而不是直接将它们全部放在Host项目中(参见raw下图).

MyProject.sln
server
  MyProject.Host
     MyProject.Host.csproj
     Startup.cs
     (etc.)
frontend
  MyProjectApp
     app.js
     index.html
     MyProjectApp.njproj
     (etc.)
Run Code Online (Sandbox Code Playgroud)

因此就前端而言,我需要做的就是让我的主机服务我的静态内容.在Express.js中,这是微不足道的.使用OWIN,我能够使用Microsoft.Owin.StaticFiles中间件轻松地完成此任务,并且它运行良好(非常灵活).

这是我的OwinStartup配置:

string dir = AppDomain.CurrentDomain.RelativeSearchPath; // get executing path
string contentPath = Path.GetFullPath(Path.Combine(dir, @"../../../frontend/MyProjectApp")); // resolve nearby frontend project directory

app.UseFileServer(new FileServerOptions
{
    EnableDefaultFiles = true,
    FileSystem = new PhysicalFileSystem(contentPath),
    RequestPath = new PathString(string.Empty) // starts at the root of the host
});

// ensure the above occur before map handler to prevent native static content handler …
Run Code Online (Sandbox Code Playgroud)

c# asp.net static-files owin owin-middleware

14
推荐指数
3
解决办法
5631
查看次数

使用NHibernate对延迟加载的集合进行分页

我读过这篇文章,其中Ayende表示NHibernate可以(与EF 4相比):

  • 使用lazy ="extra"的集合 - Lazy extra意味着NHibernate适应您可能在集合之上运行的操作.这意味着blog.Posts.Count不会强制加载整个集合,而是会创建一个"从Posts中选择count(*)BlogId = 1"语句,并且blog.Posts.Contains()同样会产生在单个查询中,而不是支付将整个集合加载到内存的价格.
  • 集合过滤器和分页集合 - 这允许您在实体集合之上定义其他过滤器(包括分页!),这意味着您可以轻松浏览blog.Posts集合,而不必将整个内容加载到内存中.

所以我决定整理一个测试案例.我创建了陈词滥调的Blog模型作为一个简单的演示,有两个类如下:

public class Blog
{
    public virtual int Id { get; private set;  }
    public virtual string Name { get; set; }

    public virtual ICollection<Post> Posts { get; private set;  }

    public virtual void AddPost(Post item)
    {
        if (Posts == null) Posts = new List<Post>();
        if (!Posts.Contains(item)) Posts.Add(item);
    }
}

public class Post
{
    public virtual int Id { get; private set; }
    public virtual string …
Run Code Online (Sandbox Code Playgroud)

c# collections nhibernate pagination lazy-loading

13
推荐指数
1
解决办法
3413
查看次数

Velocity中的条件运算符

有没有办法在Velocity中做三元运算符?这就是我想做的事情:

#set ($name = ($args.get(0) == "") ? "default" : $args.get(0))
Run Code Online (Sandbox Code Playgroud)

而不是粗糙的if-else

#if ($args.get(0) == "")
    #set ($name = "default")
#else
    #set ($name = $args.get(0))
#end
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

velocity ternary-operator

11
推荐指数
1
解决办法
9701
查看次数

单元测试接口的定义是否必要?

我偶尔会听到或读到人们在单元测试中断言他们的接口.我并不是要嘲笑一个用于其他类型测试的接口,而是专门创建一个伴随接口的测试.

考虑这个超级蹩脚的袖手旁观的例子:

public interface IDoSomething
{
   string DoSomething();
}
Run Code Online (Sandbox Code Playgroud)

和测试:

[TestFixture]
public class IDoSomethingTests
{
   [Test]
   public void DoSomething_Should_Return_Value()
   {
        var mock = new Mock<IDoSomething>();
        var actualValue = mock.Expect(m => m.DoSomething()).Returns("value");

        mock.Object.DoSomething();
        mock.Verify(m => DoSomething());
        Assert.AreEqual("value", actualValue);
   }
}
Run Code Online (Sandbox Code Playgroud)

我想这个想法是使用测试来驱动界面的设计,并为实现者提供预期的指导,以便他们可以自己进行良好的测试.

这是一种常见(推荐)的做法吗?

c# unit-testing interface mocking

11
推荐指数
2
解决办法
6536
查看次数

如何声明泛型类型的泛型约束

我有两个通用的抽象类型:EntityAssociation.

让我们说Entity看起来像这样:

public class Entity<TId>
{ 
//...
}
Run Code Online (Sandbox Code Playgroud)

并且Association看起来是这样的:

public class Association<TEntity, TEntity2>
{
//...
}
Run Code Online (Sandbox Code Playgroud)

如何约束关联,以便它们可以属于任何实体?

我可以通过以下方式完成它:

public class Association<TEntity, TId, TEntity2, TId2>
     where TEntity : Entity<TId>
     where TEntity2: Entity<TId2>
{
//...
}
Run Code Online (Sandbox Code Playgroud)

随着更多类型的衍生Association,这变得非常繁琐,因为我必须继续传递TId和TId2.除了删除约束之外,还有更简单的方法吗?

c# generics constraints

9
推荐指数
1
解决办法
411
查看次数

授权计算机访问Web应用程序

我有一个Web应用程序,我的任务是添加安全登录以增强安全性,类似于Google添加到Google帐户的内容.

用例

基本上,当用户登录时,我们想要检测用户是否先前已授权此计算机.如果计算机未经授权,则向用户发送他们必须输入的一次性密码(通过电子邮件,短信或电话),用户可以选择记住该计算机.在Web应用程序中,我们将跟踪授权设备,允许用户查看他们最后从该设备登录的时间/位置,并在他们选择时取消对任何设备的授权.

我们需要一种非常轻便的解决方案(意思是,不需要客户端软件安装),并且可以与Safari,Chrome,Firefox和IE 7+一起使用(不幸的是).我们将提供x509安全性,提供足够的安全性,但我们仍然需要为不能或不会使用x509的客户提供解决方案.

我的目的是使用cookie存储授权信息(或者,可能使用本地存储,降级为闪存cookie,然后是普通cookie).

在First Blush

初始安全登录序列图 跟踪两个单独的值(本地数据或cookie):表示安全登录令牌的哈希,以及设备令牌.这两个值都由Web应用程序驱动(并记录),并由客户端决定.SSO令牌取决于设备以及序列号.这有效地允许设备被取消(所有SSO令牌变得无效)并通过使用序列号减轻重放(但不是有效的,这就是为什么我问这个问题),并使用随机数.

问题

使用此解决方案,某人可以只复制SSO和设备令牌并在另一个请求中使用.虽然序列号将帮助我检测到这种滥用并因此取消对设备的授权,但检测和响应只能在有效设备和恶意请求都尝试访问之后发生,这是足够的时间来完成损坏.

我觉得使用HMAC会更好.使用私钥跟踪设备,序列,创建随机数,时间戳和散列,然后将散列加上这些值作为纯文本发送.服务器执行相同操作(除了验证设备和序列)并进行比较.这似乎更容易,更可靠......假设我们可以安全地协商,交换和存储私钥.

那么,我如何安全地为授权设备协商私钥,然后安全地存储该密钥?是否更有可能,至少,如果我决定使用本地存储或闪存cookie存储私钥,只是说它"足够好"?或者,我可以对原始草案做些什么来缓解我描述的漏洞?

security authentication hmac one-time-password

9
推荐指数
1
解决办法
3959
查看次数