我正在尝试设置IIS URL重写规则以匹配403响应,因为有人在禁用目录浏览时尝试浏览目录.我想然后将它们重定向到我为404定义的通常的ASP.NET自定义错误页面.
这就是我目前所拥有的:
<outboundRules>
<!-- By default, browsing a directory with no default resource will return 403 -->
<rule name="Directory browsing location">
<match serverVariable="RESPONSE_LOCATION" pattern="(.*)" />
<conditions>
<add input="{RESPONSE_STATUS}" pattern="^403" />
</conditions>
<action type="Rewrite" value="/Error/PageNotFound?aspxerrorpath={PATH_INFO}"/>
</rule>
<rule name="Directory browsing status code" patternSyntax="ExactMatch">
<match serverVariable="RESPONSE_STATUS" pattern="403" />
<action type="Rewrite" value="302" />
</rule>
</outboundRules>
Run Code Online (Sandbox Code Playgroud)
我的假设是它需要是一个出站规则,我需要重写状态代码并添加位置响应头,尽管后者在最初的403响应中不会存在.
目前的行为是......没有.无论我做多少调整,我仍然会看到403s.有什么想法吗?
顺便说一下,不,网站上没有任何合法的403可以被吞下.我还可以为可能导致满足条件的每个路径创建入站规则,但这不是很可扩展.
我正在尝试为VS2010找到Microsoft CAT.NET,看起来他们的2.0版本有一个测试版,但Microsoft Connect中的每个链接现在已经死了.这是我能找到的最新参考:http://blogs.msdn.com/securitytools/archive/2010/02/05/how-to-use-cat-net-2-0-beta.aspx
一些参考文献表明它可能已被纳入FxCop.有谁知道该项目的状态?
我正在使用一个createuserwizard控件.在CreatedUser事件上,我放置了此代码以将用户添加到角色.
protected void RegisterUser_CreatedUser(object sender, EventArgs e)
{
FormsAuthentication.SetAuthCookie(RegisterUser.UserName, false /* createPersistentCookie */);
if (!Roles.IsUserInRole("Test"))
{
var User= Membership.GetUser();
Roles.AddUserToRole(User.UserName, "Test");
}
string continueUrl = RegisterUser.ContinueDestinationPageUrl;
if (String.IsNullOrEmpty(continueUrl))
{
continueUrl = "~/";
}
Response.Redirect(continueUrl);
}
Run Code Online (Sandbox Code Playgroud)
我还想知道FormsAuthentication.SetAuthCookie(RegisterUser.UserName, false /* createPersistentCookie */);它的用途和用途Membership.GetUser()是什么,为什么是null.
我刚刚开始掌握TeamCity和MSDeploy,并且已经部署到由SVN提交触发的开发环境中工作得很好.我的问题是在释放到测试环境方面; 我希望根据需要并根据特定的修订号来执行此操作.基于用户定义的修订配置TeamCity构建的最佳方法是什么?
我在各种控制器上使用AuthorizeAttribute,可能需要根据请求本身的某些属性返回403或429(请求太多).我完全在一个自定义的OnAuthorization实现中实现它,然后在必要时抛出一个带有相应响应代码的新HttpResponseException.在我的机器上工作得很好......
在规模上(每分钟数千个请求),这个实现很糟糕,它崩溃了网站.将相同的逻辑移动到控制器操作本身并且仅返回适当的HttpResponseMessage就perf而言工作得非常好,因此在OnAuthorization中抛出异常的费用似乎是perf问题的根本原因.
我喜欢在我可以用来装饰多个控制器和动作的属性中实现它的想法,我强烈不喜欢将少量逻辑移动到控制器动作中,然后重复多次.是否可以从注释返回适当的HTTP状态而不抛出异常?即使它不是从AuthorizeAttribute继承,以这种方式装饰代码也会更好.
编辑:这是Web API 2,而不是MVC
我正在努力使用一些XAML语法,希望有人可以提供建议.我想创建一个"效果"类型样式资源,其中包含一个DropShadowEffect定义,该定义可以重复使用,而不是总是手动设置属性.这就是我所拥有的:
<Style TargetType="DropShadowEffect" x:Name="DropShadowEffectStyle">
<Setter Property="BlurRadius" Value="5" />
<Setter Property="Direction" Value="315" />
<Setter Property="ShadowDepth" Value="2" />
<Setter Property="Opacity" Value="0.5" />
</Style>
<Style TargetType="TextBlock" x:Name="PageTabLabelStyle">
<Setter Property="FontSize" Value="16" />
<Setter Property="FontFamily" Value="Arial" />
<Setter Property="Foreground" Value="#EFEFEF" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Margin" Value="0, 10, 0, 10" />
<Setter Property="Effect" Value="{StaticResource DropShadowEffectStyle}" />
</Style>
Run Code Online (Sandbox Code Playgroud)
每次运行都会失败,所以我显然错过了一些东西.我认为这是围绕文本块样式的"效果"属性,期望"效果"类型而不是"DopShadowEffect"类型.有任何想法吗?
我在TeamCity工件配置中使用通配符语法进行了一个小小的戏剧.我想从任何文件夹中获取与myproject.*.dll模式匹配的每个文件,并将每个DLL放在工件路径的根目录中.
这是我目前得到的:
**/obj/Debug/myproject.*.dll => /
Run Code Online (Sandbox Code Playgroud)
这是抓取所有的DLL,但它将它们放在与源相同的文件夹结构中,而不是在我获得"Web/obj/debug/myproject.web.dll"的工件中以"myproject.web.dll"结尾.
我在这里错过了什么?
我们刚刚开始向我们的团队介绍StyleCop,并使用Code Plex 的StyleCop ReSharper插件.问题是,项目中的每个文件似乎都在分析,我们找不到排除特定文件的方法.这包括文件,例如DBML中的designer.cs文件或项目中包含的第三方组件.这意味着您在ReSharper中的站点范围代码分析总是显示错误,您永远不会让它变为"绿色".
始终存在ExcludeFromStyleCop标记,您可以将其放在.csproj中,但这仅供MSBuild使用.右键单击ReSharper错误窗口中的文件并告诉它"忽略错误"也似乎不起作用; 窗口只是重新加载,同一文件再次被分析.
有人对此有任何想法吗?
我在Web部署方面遇到了一些问题,我似乎无法解决这个问题.每次我尝试通过包中的[proj] .deploy.cmd命令发布到WMSvc时我得到"远程服务器返回错误:(401)未经授权".该命令如下所示(项目称为"Web",服务器名为"AutoDeploy"):
Web.deploy.cmd /Y /M:https://AutoDeploy:8172/MsDeploy.axd -allowUntrusted
Run Code Online (Sandbox Code Playgroud)
我可以通过Visual Studio 正常发布到https:// AutoDeploy:8172/MsDeploy.axd,因此该服务肯定正在运行,我可以成功地以管理员身份对其进行身份验证.在以管理员身份登录时,在计算机上本地运行此命令(它只是一个小的本地Win 2k8 VPC)不起作用,并且使用管理员帐户添加/ U和/ P参数不起作用.
我已经启用了失败的请求跟踪并且得到了这个输出,所以至少有一些东西需要参考但不幸的是我无法确定根本原因是什么.我正在尝试使用与Visual Studio中相同的凭据连接到同一服务,但显然有些不同.
出于兴趣,我可以按照以下方式发布到Web部署代理服务(MsDepSvc):
Web.deploy.cmd /Y /M:http://AutoDeploy/MsDeployAgentService /U:AutoDeploy\Administrator /P:...
Run Code Online (Sandbox Code Playgroud)
但我真的想让WMSvc运行!有什么想法吗?
我怀疑这可能是一个简单的答案,我只是没有看到,但每当我使用MSBuild或针对.csproj和目标"Package"的Visual Studio解决方案运行器运行TeamCity构建时,构建工件总是包含"csproj" .teamcity.patch"项目名称后面的字符串:

通过命令行运行相同的过程不包括这些.它导致我的问题是我的构建脚本有一个目标,它在程序包任务运行后查找"Web.deploy.cmd",显然当文件以这种方式命名时它找不到它.我不愿意在构建脚本中更改命令以包含TeamCity字符串,因为它将从构建服务器外部运行它,从而造成严重破坏.
任何人都可以告诉我为什么会发生这种情况以及当你需要能够通过名称引用工件时如何解决它?