如果正在检查用户的角色以确定他们是否可以访问页面,那么将此检查仅安排在一个页面内是否安全if (!Page.IsPostBack) { ... }?难道是可能的客户,使Page.IsPostBack == true独立的ASP.net; 也就是说,客户端POST到页面并设置正确的表单字段?如果可能,那么我认为最好的做法是检查每个页面加载的安全性,而不仅仅是何时Page.IsPostBack == false.
根据我之前的问题,ASP.net的默认Page.IsPostBack实现是否安全(它不是;它可以伪造...... HTTP动词甚至不必是POST!),我在想; 肯定有一个更好的方法来实现它?我们能否提出一个Page.IsPostBack实现,当它成立时,几乎可以保证表明该页面是一个真正的ASP.net回发?如果一个人只想进行一次安全检查(比如某些内容是否会根据用户的角色出现),并且只有在我们不处理ASP.net回发时才这样做,这一点很重要.
我对如何做到这一点的第一个想法是在属性中实现检查代码,所以我可以在里面写这样的东西Page_Load:
if (!_isPostBack)
{
// Do security check
if (userIsNotAuthorized)
{
btnViewReports.Visible = false;
btnEditDetails.Visible = false;
// etc.
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法安全地实施_isPostBack?也许在ViewState中存储一些难以或不可能进行假冒回传的东西?随机字符串?
我对的默认行为感到惊讶AuthorizeAttribute。如果您不提供任何Roles属性,它似乎只是允许任何授权用户访问控制器/操作。我想要白名单行为;如果Roles为null或为空,则拒绝所有用户访问。如何使这种现象发生?
我有一个ASP.NET MVC Web应用程序,其中所有页面都使用单个母版Layout.cshtml页.虽然我通常想RenderBody(),我有一个可以在我的数据库中启用的站点关闭机制,所以我基本上想要一个看起来像这样的布局页面:
@if(DbHelper.SiteIsShutDown) {
<h1>Site is shut down temporarily</h1>
}
else {
<h1>Welcome to the site</h1>
@RenderBody()
}
Run Code Online (Sandbox Code Playgroud)
麻烦的是,如果SiteIsShutDown是真的,那么RenderBody()不会被调用,我得到异常:
尚未为布局页面调用"RenderBody"方法...
那么我有办法解决这个问题吗?我只是想从我的布局页面渲染一些输出,而不是我的视图页面.
我将数据存储在描述链表的XML文档中; 除了一个节点之外的所有节点都跟随另一个节点
<cars>
<car id="9" follows="34" />
<car id="12" follows="20" />
<car id="20" follows="9" />
<car id="29" follows="30" />
<car id="30" />
<car id="34" follows="29" />
</cars>
Run Code Online (Sandbox Code Playgroud)
...给出30,29,34,9,20,12的排序.我使用.NET的LinkedList类来构造链接列表以反映这些数据,但是由于值不按顺序排列,所以构造起来很尴尬.我真正想要做的是假设数据是有效的 - 只有一个第一个值,而所有其他值都跟随列表中另一个节点的"跟随"值.像这样的代码会很好(FindFirstForwards我编写的自定义扩展方法是为了找到给定lambda返回true的第一个链表项):
LinkedList<CarInstance> orderedCars = new LinkedList<CarInstance>();
XPathNodeIterator xmlIterator = _nav.Select("/dflt:cars/dflt:car", _namespaceResolver);
while (xmlIterator.MoveNext()) {
if (!(xmlIterator.Current.Select("@follows").Count > 0)) {
orderedCars.AddFirst(new CarInstance {
CarId = int.Parse(xmlIterator.Current.GetAttribute("id", _defaultNamespace))
});
}
else {
orderedCars.AddAfter(orderedCars.FindFirstForwards(car => car.CarId == int.Parse(xmlIterator.Current.GetAttribute("follows", _defaultNamespace))), new CarInstance {
CarId = int.Parse(xmlIterator.Current.GetAttribute("id", _defaultNamespace))
});
}
}
Run Code Online (Sandbox Code Playgroud)
麻烦的是,如果这辆汽车没有加入 …
我想不时使用MiniProfiler来分析我的代码,但我不想分支并继续重新引入它; 我想把它留在那里,@MiniProfiler.RenderIncludes()当我不使用它时,只是从我的布局模板中删除调用.但是,我的代码仍然如下所示:
using (MiniProfiler.Current.Step("Generate events index view model")) {
_thisStep = MiniProfiler.Current.Step("Check query string");
int pageIndex = 0;
// Do check...
_thisStep.Dispose();
// Do other stuff...
}
Run Code Online (Sandbox Code Playgroud)
将这些Steps留在那里并处理它们需要多少开销?有没有办法告诉MiniProfiler我没有使用它,所以Step基本上什么也没做,但我仍然可以把它留在我的代码中?
不引人注意的验证基于这样的想法:在用户提交表单之前,您不进行表单验证; 一旦发生这种情况,如果表单上的某些内容无效,则每个字段在用户更改后立即进行验证.
我想要做的是在表单元素上"不引人注意地"触发验证 - 也就是说,如果用户已经尝试提交表单,则仅验证表单元素.所以我可以触发元素的验证(我在更改某个复选框时执行此操作),如下所示:
$('#chkNoPersonId').change(function(){
$('#lstPersonId').valid();
});
Run Code Online (Sandbox Code Playgroud)
但问题是,即使用户尚未提交表单一次,这将始终导致lstPersonId验证并在无效时显示错误.我希望只有在用户尝试提交表单后才能对其进行验证.是否有一些值我可以查看用户是否已尝试提交表单,或者其他方式我可以实现此行为?
我正在使用.NET Regex来从字符串中捕获信息.我有一个用条形字符括起来的数字模式,我想挑出数字.这是我的代码:
string testStr = "|12||13||14|";
var testMatch = Regex.Match(testStr, @"^(?:\|([0-9]+)\|)+$");
Run Code Online (Sandbox Code Playgroud)
但是,testMatch.Captures只有1个条目,它等于整个字符串.为什么它不具备3项,12,13,和14?我错过了什么?
我已经看到了如何使用遍历目录的批处理文件并处理与通配符表达式匹配的各种文件的示例,例如:
FOR %%f IN (*.ext) DO (
ECHO Found ext file %cd%\%%f
)
Run Code Online (Sandbox Code Playgroud)
以上内容仅匹配.ext当前目录中的文件.但是如果我只想匹配一个确切的文件名,如果它存在于该目录中呢?我想要的东西:
FOR %%f IN (someFile.ext) DO (
ECHO Found our file name in %cd%
)
Run Code Online (Sandbox Code Playgroud)
然而,这似乎不起作用; 该FOR命令将"somefile.ext"解释为字符串,并始终运行FOR循环一次.如何尝试匹配当前目录中的确切文件名,没有通配符?
我有一个奇怪的问题; 通常,当您debug=false在web.config文件中设置并在发布模式下编译Web应用程序时,它会提高性能.对于我网站上的某些页面,它主要是减慢渲染速度.这是调试模式下的页面:

...这是发布模式下的同一页面,调试模式关闭:

不,我没有把那两个弄糊涂了.什么在地球上可能导致调试模式更快地渲染页面3次(如果你忽略控制器和SQL性能,它会使页面更快地渲染五次)?!有什么明显的我可能会错误配置?
c# ×4
asp.net-mvc ×3
asp.net ×2
performance ×2
security ×2
.net ×1
algorithm ×1
batch-file ×1
cmd ×1
debugging ×1
for-loop ×1
javascript ×1
jquery ×1
linked-list ×1
postback ×1
razor ×1
regex ×1
validation ×1
webforms ×1
windows ×1
xml ×1