我知道如果我有一个像XController/Action?id = 1的url,还有一个action方法
void Action(int id)
Run Code Online (Sandbox Code Playgroud)
将自动从查询字符串中读取id参数.
但是,当我事先没有知道所有参数的名称时,如何访问整个查询字符串.例如:
void Action(QueryStringCollection coll) {
object id = coll["id"];
}
Run Code Online (Sandbox Code Playgroud)
可以这样做吗?
我有一个在单个服务器上运行良好的应用程序.我的客户现在希望将其转移到负载均衡的环境中.这样做时哪些事情可能会让我感到困惑?
目前我知道
例如,这两个都在这里描述,所以我正在寻找其他的东西.
我一直在网上搜索,发现许多奇怪的答案,我几乎尝试了所有这些.我的问题是这个.我的登录页面包含:
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(min), persistCookie, userid.ToString());
string encTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
cookie.Expires = ticket.Expiration;
Response.Cookies.Add(cookie);
FormsAuthentication.RedirectFromLoginPage(userName, persistCookie);
Run Code Online (Sandbox Code Playgroud)
现在min值是基于每个用户的,可以单独设置,persistCookie也是如此.
根据我的理解,此代码应该导致覆盖web.config中的默认值的可能性.这应该是30分钟.
<authentication mode="Forms">
<forms loginUrl="~/Default/default.aspx" defaultUrl="~/User/UserMain.aspx"/>
</authentication>
Run Code Online (Sandbox Code Playgroud)
min当前设置为120,并且persistCookie设置为太真.当我登录时,我会在30分钟时超时.(不是会话,所以设置了某个到期日期,因为如果没有设置cookie应该是基于会话的,我也不会得到120分钟,这是一种交易在这里)
我的问题是,为了简化它,我如何将值'min'作为cookie的到期日期?
这可能会变成一件简单的事情,但我现在完全陷入困境,所以任何帮助都会受到影响.
编辑:我将登录逻辑更改为:
FormsAuthenticationTicket fat = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(min), persistCookie, userid.ToString());
string encTicket = FormsAuthentication.Encrypt(fat);
Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket) { Expires = fat.Expiration });
Response.Redirect(FormsAuthentication.GetRedirectUrl(userName, false));
Run Code Online (Sandbox Code Playgroud)
现在它有效.但我似乎无法弄清楚为什么这会起作用,而不是前一个.故障单创建是一样的,唯一的区别是我在创建HttpCookie时添加了HttpCookie的Expires属性,而不是在创建对象之后.
如果有人有一个很好的解释我都是耳朵!:)
有谁知道.net中的延迟流实现?IOW,我想创建一个像这样的方法:
public Stream MyMethod() {
return new LazyStream(...whatever parameters..., delegate() {
... some callback code.
});
}
Run Code Online (Sandbox Code Playgroud)
当我的其他代码调用MyMethod()返回以检索流时,它实际上不会执行任何工作,除非有人实际尝试从该流中读取数据。通常的方法是使MyMethod将stream参数作为参数,但是在我的情况下不起作用(我想将返回的流提供给MVC FileStreamResult)。
为了进一步说明,我正在寻找的是创建一系列分层的转换,因此
数据库结果集=(已转换为)=>字节流=(已链接至)=> GZipStream =(已传递)=> FileStreamResult构造函数。
结果集可能很大(GB),所以我不想将结果缓存在MemoryStream中,可以将其传递给GZipStream构造函数。相反,我想在GZipStream请求数据时从结果集中获取。
如何在Visual Studio单元测试中使用外部数据文件?如果我尝试将其包含在测试项目中并将"复制到输出目录"设置为true,则仍然无法找到它.
我有的是:
[TestMethod]
public void DoMyTest() {
using (StreamReader rdr = new StreamReader("MyTestData.txt")) {
blahblah
}
}
Run Code Online (Sandbox Code Playgroud)
但是,该文件不存在,所以我得到一个例外.我的测试数据不能很好地映射到XML或CSV,因此使用DataSourceAttribute不是一个可行的选择.
如果我将日期时间作为浮点数存储在数据库中,有什么可以咬我的?我有一个很好的理由这样做所以不要抱怨:)
编辑:我正在考虑将转换(float,@ thedate)存储在浮点列中.
我正在尝试解析一个表达式a IN [3 .. 5[,其中尖括号的方向决定了区间是包含还是排除.我希望将其重写为AST
NODE-TYPE
|
+------------+-----------+
| | |
variable lower-bound upper-bound
Run Code Online (Sandbox Code Playgroud)
其中NODE-TYPE是BTW_INCLUSIVE,BTW_EXCL_LOWER,BTW_EXCL_UPPER或BTW_EXCL_BOTH之一,具体取决于尖括号的方向.
我有以下解析规则:
interval_expr : expr1=variable IN
(LBRACKET|RBRACKET)
expr2=expression DOTDOT expr3=expression
(LBRACKET|RBRACKET)
-> ^(BETWEEN $expr1 $expr2 $expr3)
Run Code Online (Sandbox Code Playgroud)
这有效,但它不会创建正确的树节点类型.如何根据匹配的内容选择要创建的节点类型?
asp.net ×2
c# ×2
.net ×1
antlr ×1
asp.net-mvc ×1
controller ×1
cookies ×1
datetime ×1
parsing ×1
query-string ×1
sql-server ×1
stream ×1
unit-testing ×1