小编bud*_*ble的帖子

删除龙卷风中的安全Cookie

我刚开始学习网络服务器,特别是龙卷风.

我想写一个带登录功能的简单网页.如Tornado文档中所述,我在用户成功插入后创建了一个安全的cookie:

self.set_secure_cookie("user", self.get_argument("user"))
Run Code Online (Sandbox Code Playgroud)

但是,如何为用户提供注销方式?如前所述,我不熟悉Web服务器,但是当我在用户尝试进入主页时检查此cookie时,我想我只需要在用户按下"注销"后将其删除?

不幸的是,我无法在龙卷风文件中找到任何关于此的信息,也无法在SO上找到.

python cookies tornado

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

在Visual Studio立即窗口中清除堆栈

使用即时窗口时,必须在运行时和设计时之间有所不同.

如果我在设计时使用立即Window并将一个局部变量放在堆栈中:

string s = "test";
Run Code Online (Sandbox Code Playgroud)

VS将启动编译器并在堆上创建一个名为s的新变量,并在设计时使用的临时堆栈帧上放置一个指针.(至少我认为它是如何工作的,至少是简化的.如果我错了,请纠正我)

从现在开始,在运行我的应用程序或关闭VS之前,我无法将s用于其他任何事情:

int s = 12;
A local variable named 's' is already defined in this scope
Run Code Online (Sandbox Code Playgroud)

我可以使用contextmenu清除即时窗口,但这实际上只是清除了窗口本身.我的局部变量仍然留在堆栈中.

我想知道,如果真的没有办法清除我之前在即时窗口中创建的所有变量?

(我使用的是VS 2012 SP1教授,但我猜这个问题与VS的每个版本保持一致)

.net c# visual-studio-2012

12
推荐指数
1
解决办法
1339
查看次数

如何通过CLR访问C#堆栈?

这可能是一个非常简单的问题,但我在SO上找不到答案,也不知道有人问我答案:

我可以写一个简单的c#方法,如下所示:

private void foo()
{
   int a = 1;
   int b = 5;
}
Run Code Online (Sandbox Code Playgroud)

如果CIL-Code(由编译器创建)由公共语言运行时执行,它将在堆栈顶部创建以下字段,而执行控件在方法内:

b = 5
a = 1
Run Code Online (Sandbox Code Playgroud)

但是现在,我扩展了Method来访问名为"a"的字段:

private void foo()
{
   int a = 1;
   int b = 5;
   Console.WriteLine(a);
}
Run Code Online (Sandbox Code Playgroud)

现在CLR必须访问不在堆栈顶部的字段,但根据FILO(先进先出)原则,它必须在访问之前处理请求字段之上的所有字段.

名为"b"的字段会在请求字段"a"上方的堆栈上发生什么?

CLR无法删除它,因为之后执行方法可能会使用它,那么会发生什么呢?

AFAIK,只有两种方法来存储字段,堆栈或堆.将它移到堆中将没有多大意义,因为这将从CLR堆叠中获得所有好处.CLR是否会创建类似第二个堆栈的东西?

这是如何工作的?

-编辑-

也许我没有清楚地解释我的意图.

如果我写一个像这样的方法:

private void foo()
{
   int a = 1;
   int b = 5;
   Console.WriteLine(a);
   Console.WriteLine(b);
}
Run Code Online (Sandbox Code Playgroud)

CLR首先在堆栈上写入2个字段,然后以相反的顺序访问它们.

首先,它必须访问字段"a",但为了达到它,CLR必须处理位于堆栈上字段"a"之上的字段"b".它不能从堆栈中删除字段"b",因为它必须在之后访问它.

这是如何运作的?

c# heap clr stack cil

5
推荐指数
2
解决办法
1003
查看次数

为什么Visual Studio 2012和ReSharper 7忘记显示Intellisense工具提示?

我在VS2012安装中发现了一个奇怪的行为.我使用VS2012 Pro和ReSharper 7. Intellisense不再显示代码建议.我在研究中发现了一些相关的问题,但是它们的设置总是略有不同,没有一个可以解决我的问题:

Intellisense正在运行,但它不再显示tooltip所选成员函数/属性.

如果我看一下C#文本编辑器设置

Tools -> Options -> Text Editor -> C# -> General
Run Code Online (Sandbox Code Playgroud)

大多数情况下,选择了两个必要的框Auto List MembersParameter Information.但是,Intellisense中的代码建议不起作用.有时,当我查看所描述的设置时,它们是未被选中的.

选择它们将使代码建议像VS2010一样工作,但只能执行一次.当我之后检查设置时,它们很可能仍然被选中,但代码建议不再起作用.

有人建议删除%AppData%\Roaming\Microsoft\VisualStudio\11.0文件夹,这对我不起作用.我也尝试重置所有更改,这也没有任何帮助.

Tools -> Import and Export Settings -> Reset
Run Code Online (Sandbox Code Playgroud)

世界上有什么东西可以让Visual Studio 忘记它的设置并触发这种不合理的行为?

-编辑-

我按下CTRL+ Alt+ 显示代码建议Space.但是,每次我想看到这些建议时,我都必须按下该快捷方式.必要时,必须每次都能自动显示它们吗?

resharper intellisense visual-studio-2012

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

ASP.net WebApi参数从URI绑定到复杂类型

我想在.net 4.5上使用ASP.net WebApi创建一个REST Web服务

网址应采用以下格式:

/values?Age=55&Height=176&Race=1&Weight=80&Gender=male&id=800001
Run Code Online (Sandbox Code Playgroud)

关联的控制器如下所示:

[HttpGet]
public string Get(int id, [FromUri]Demographics demographics)
{ // etc.}
Run Code Online (Sandbox Code Playgroud)

人口统计数据是一个自定义对象,基本上只是具有某些属性的DTO.但是,它包含一个具有自定义枚举类型的属性:

enum Gender
{
 Female = 0,
 Male
}
Run Code Online (Sandbox Code Playgroud)

如果URL是上述格式,则默认映射可以正常工作.但是,当然我还需要检查url提供的参数是否正确.

ASP.net WebApi(afaik)默认尝试根据假定的类型映射每个参数(或者如果它可以转换为该类型).如果它在URI中找不到匹配的值,则假设它只是0.

现在,这将我带到一个非常不幸的情况,根据定义,0仍然是Gender Demographics.Gender(0~Meminual.Female)的有效值.

最简单的解决方案是更改枚举,使0成为我可以检查的"不确定"状态.但是,我无法改变枚举.我可以为Demographics对象创建自己的重载但不愿意这样做,因为我认为必须有一个更好的方法.

我可以明确地将性别参数绑定到URI中的参数,并在未提交时抛出异常吗?

我读到了类型转换器,但我必须处理URI字符串,并认为我必须实现WebApi显然已经具有的很多功能.

请记住,我必须处理URI,不能使用请求正文.

.net c# asp.net asp.net-web-api

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

MSTest - 为什么没有 AreEqual(object, object, IComparer<T>)?

使用 MSTest 编写 UnitTests 我想断言返回值与我期望的返回值的相等性。

预期类型是一种自定义类型,既不实现IComparable接口也不实现IEquatable接口,这就是为什么我想提供Assert.AreEqual比较两个对象的可能性。

我知道这种可能性存在于CollectionAssert.AreEqual. 然而,这种方法需要两个继承ICollection我的对象没有的对象。

为什么Assert.AreEqual不允许我指定自定义比较器?我错过了什么吗?

c# unit-testing mstest icomparable

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

Visual Studio 2012 Extension,显示鼠标悬停时的成员信息

在我的Visual Studio 2010 Ultimate安装中,当我将鼠标悬停在成员上并点击标准的VS Info对话框时,有一项功能将显示扩展的信息.这将导致此窗口:

在此输入图像描述

如您所见,我点击的类/成员有很多信息(在本例中为String).

这是VS 2010 Ultimate的标准功能还是带有扩展功能?有谁知道VS 2012(专业版)中支持此功能的扩展?

visual-studio visual-studio-extensions visual-studio-2012

2
推荐指数
1
解决办法
748
查看次数

让我的同事做git put而不用他连接到回购

我目前离家,但我的工作笔记本电脑.在它上面,我有一个我创建的Git仓库,因为我是唯一真正对这个特定项目做任何事情的人.

我分享了这个文件夹,并让我的同事有权将git repo克隆到他的机器上(作为一个远程分支)

他现在需要我最近的改变,通常他会做一个git pull.这是不可能的,因为我现在没有VPN,他无法通过不安全的渠道连接.

有没有办法导出回购(并将其托管在网络上的某处加密),以便他可以下载,解压缩并导入它?我希望结果没有差异,就好像我们正常工作一样.在我重返工作岗位后,我们也必须能够继续共同努力.

-edit-我应该补充一点,回购目前非常小

git git-remote

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

为什么List <T> .Exists比foreach循环慢?

我在WinForms中,在保存对DataBase的更改之前,我必须检查使用的ErrorProvider是否为任何显示的控件保留错误.

我想出了几种方法可以做到这一点:

  • 一个简单的foreach循环在ControlContainer上:

        foreach (Control c in ctrlcontainer)
        {
            if (epOrderHeader.GetError(c) != string.Empty)
            {
                return true;
            }
        }
        return false;
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用List扩展方法Exists(谓词):

    return(ctrlcontainer.Exists(c => epOrderHeader.GetError(c)!= string.Empty);

从胃口开始,我预计第二个是最快的,但是使用我发现的Eqatec Profiler,foreach循环稍微快一些(在我的情况下大约1ms).虽然这是微不足道的,但我仍然想知道为什么会这样?

编译器如何翻译这些方法,为什么第一个更快?

c# loops generic-list

0
推荐指数
1
解决办法
659
查看次数

参数约束 - 调用约束类型的调用方法?

我有一个带泛型参数的方法:

internal void DoSomething<T>(T workWithThis)
{
}
Run Code Online (Sandbox Code Playgroud)

我现在想要限制此方法只接受继承我想指定的几个接口之一的参数.但是我还没有找到办法.我想要的是这样的:

internal void DoSomething<T>(T workWithThis) where T : ISomething | ISomethingElse
{
}
Run Code Online (Sandbox Code Playgroud)

显然这不起作用,所以我尝试用静态方法来检查T的类型:

public static bool CheckType(Type t)
{
return */check here*/
}

internal void DoSomething<T>(T workWithThis) where T : CheckType(typeof(T))
{
}
Run Code Online (Sandbox Code Playgroud)

显然,这也无济于事.问题是为什么?为什么编译器阻止我这样做,根据我的理解,它没有理由不能工作

c# generics

0
推荐指数
1
解决办法
318
查看次数