可以使用ASP.Net路由(而不是MVC)来提供静态文件吗?
说我想路线
http://domain.tld/static/picture.jpg
Run Code Online (Sandbox Code Playgroud)
至
http://domain.tld/a/b/c/picture.jpg
Run Code Online (Sandbox Code Playgroud)
我想动态地做这件事,因为重写的URL是动态计算的.我无法一劳永逸地建立静态路线.
无论如何,我可以创建这样的路线:
routes.Add(
"StaticRoute", new Route("static/{file}", new FileRouteHandler())
);
Run Code Online (Sandbox Code Playgroud)
在FileRouteHandler.ProcessRequest方法我可以重写从路径/static/picture.jpg到/a/b/c/picture.jpg.然后我想为静态文件创建一个处理程序.ASP.NET使用它StaticFileHandler来实现此目的.不幸的是,这堂课是内部的.我试图使用反射创建处理程序,它实际上工作:
Assembly assembly = Assembly.GetAssembly(typeof(IHttpHandler));
Type staticFileHandlerType = assembly.GetType("System.Web.StaticFileHandler");
ConstructorInfo constructorInfo = staticFileHandlerType.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, Type.EmptyTypes, null);
return (IHttpHandler) constructorInfo.Invoke(null);
Run Code Online (Sandbox Code Playgroud)
但使用内部类型似乎不是正确的解决方案.另一个选择是实现我自己的StaticFileHandler,但正确地这样做(支持范围和etags等HTTP的东西)是非常重要的.
我该如何处理ASP.NET中静态文件的路由?
我在64位Windows 7 Professional上使用Windows PowerShell 2.0 .我的桌面上有一个脚本,当我尝试运行它时会导致以下错误:
File C:\Users\UserName\Desktop\Script.ps1 cannot be loaded. The file C:\Users\UserName\Desktop\Script.ps1 is not digitally signed. The script will not execute on the system. Please see "get-help about_signing" for more details..
At line:1 char:54
+ C:\Users\UserName\Desktop\TestGetWindowsUpdateLog.ps1 <<<<
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException
Run Code Online (Sandbox Code Playgroud)
我既是域管理员又是本地管理员,如果我运行Get-ExecutionPolicy -List,我可以看到Group Policy Object我创建的配置PowerShell是RemoteSigned在机器级正确应用执行策略:
Scope ExecutionPolicy
----- ---------------
MachinePolicy RemoteSigned
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Undefined
Run Code Online (Sandbox Code Playgroud)
我自己在记事本中 …
所以我有一个 C# 类库项目,我只打算在 Windows 上使用。它包含一些使用System.Drawing.Image仅在 Windows 上可用的类的类。升级到 Visual Studio 2022 并将目标框架设置为 .NET 6.0 后,我看到一堆警告:
\n\n\n
CA1416“此调用站点可在所有平台上访问。\'SomeClass.SomeMethod\' 仅在以下平台上受支持:\'windows\'。
请参阅下面的屏幕截图了解一些示例:
\n\n从某种意义上说,VS2022 扫描了库并找到了我在库中使用的所有平台特定代码,这很酷。但我想告诉 VS,我只打算在 Windows 上使用该库,它可以消除所有这些警告。
\n首先,我检查了Target framework项目属性中的选项,但没有看到任何 Windows 特定目标。
然后我决定直接编辑项目.csproj并更改Target framework
<TargetFramework>net6.0</TargetFramework>\nRun Code Online (Sandbox Code Playgroud)\n到
\n<TargetFramework>net6.0-windows</TargetFramework>\nRun Code Online (Sandbox Code Playgroud)\n但是,遗憾的是,即使在重新编译之后,警告也没有消失。然后我读了一些警告CA1416,果然Microsoft Docs中说,评估此警告时会忽略目标框架名称,但是,VS 确实根据影响此警告的 TFM 向项目添加了一个属性,但是仅当项目配置为AssemblyInfo.cs动态生成文件时,它才会这样做。但是,唉,我的项目是AssemblyInfo.cs作为实际文件维护的,而不是在构建时自动生成的。
因此,此时,我已准备好踢球并禁用CA1416我的项目的警告。因此,在项目的.proj文件中,我添加了CA1416发布和调试版本,如下所示:
<PropertyGroup Condition="\'$(Configuration)|$(Platform)\'==\'Debug|AnyCPU\'">\n <NoWarn>1701;1702;CA1416;</NoWarn>\n</PropertyGroup>\n\n<PropertyGroup Condition="\'$(Configuration)|$(Platform)\'==\'Release|AnyCPU\'">\n <NoWarn>1701;1702;CA1416;</NoWarn>\n</PropertyGroup>\nRun Code Online (Sandbox Code Playgroud)\n … c# code-analysis visual-studio microsoft.codeanalysis .net-6.0
我最近写了一些代码,我无意中将一个变量名重用作为一个动作的参数,该动作在一个已经具有同名变量的函数中声明。例如:
var x = 1;
Action<int> myAction = (x) => { Console.WriteLine(x); };
Run Code Online (Sandbox Code Playgroud)
当我发现重复时,我惊讶地发现代码编译并完美运行,根据我对 C# 中作用域的了解,这不是我所期望的行为。一些快速的谷歌搜索出现了抱怨类似代码确实会产生错误的SO 问题,例如Lambda Scope Clarification。(我将该示例代码粘贴到我的 IDE 中以查看它是否可以运行,只是为了确保它可以完美运行。)此外,当我在 Visual Studio 中进入“重命名”对话框时,第一个x被突出显示为名称冲突。
为什么这段代码有效?我在 Visual Studio 2019 中使用 C# 8。
我有一个非常大的整数列表(大约 20 亿个元素)和一个带有索引(几千个元素)的列表,我需要从第一个列表中删除元素。我目前的方法是遍历第二个列表中的所有索引,将每个索引传递给RemoveAt()第一个列表的方法:
indices.Sort();
indices.Reverse();
for (i = 0; i < indices.Count; i++)
{
largeList.RemoveAt(indices[i]);
}
Run Code Online (Sandbox Code Playgroud)
但是,大约需要 2 分钟才能完成。我真的需要更快地执行此操作。有没有办法优化这个?
我有一个带有 10 个内核的 Intel i9X CPU,所以也许是某种并行处理方式?
按照这个问题Foreach循环处理控件跳过迭代它告诉我,迭代是允许通过更改集合:
例如,以下内容:
List<Control> items = new List<Control>
{
new TextBox {Text = "A", Top = 10},
new TextBox {Text = "B", Top = 20},
new TextBox {Text = "C", Top = 30},
new TextBox {Text = "D", Top = 40},
};
foreach (var item in items)
{
items.Remove(item);
}
Run Code Online (Sandbox Code Playgroud)
投
InvalidOperationException:Collection已被修改; 枚举操作可能无法执行.
但是,在.Net表单中,您可以执行以下操作:
this.Controls.Add(new TextBox {Text = "A", Top = 10});
this.Controls.Add(new TextBox {Text = "B", Top = 30});
this.Controls.Add(new TextBox {Text = "C", Top = 50});
this.Controls.Add(new …Run Code Online (Sandbox Code Playgroud) 我创建了一个PowerShell模块,如果我像这样加载它就可以正常工作
Import-Module "C:\temp\My.PowerShell.DocumentConversion.dll"
Run Code Online (Sandbox Code Playgroud)
我确实在全局程序集缓存中注册了该模块,但无法从那里加载它.我已经验证了模块实际上已加载到gac中.我认为像这样加载模块就足够了
Import-Module My.PowerShell.DocumentConversion.dll
Run Code Online (Sandbox Code Playgroud)
显然我错了,怎么做从gac运行powershell模块?
我是 Powershell 的新手,但我已经尽力了。我正在尝试创建一个脚本来将文件复制到阵列中所有 XP 计算机的所有用户桌面。该脚本基本上是说“如果机器可 ping 通,则复制文件,如果不是,则不复制。” 然后我想将此信息导出到 CSV 文件中以供进一步分析。
我已经设置了一切,但无论我做什么,它都只会导出它运行的最后一台电脑。它似乎运行在所有 PC 上(通过输出到 txt 文件进行测试),但它不会将所有计算机记录到 CSV。任何人都可以提供任何建议吗?
$ArrComputers = "PC1", "PC2", "PC3"
foreach ($Computer in $ArrComputers) {
$Reachable = Test-Connection -Cn $Computer -BufferSize 16 -Count 1 -ea 0 -quiet
$Output = @()
#Is the machine reachable?
if($Reachable)
{
#If Yes, copy file
Copy-Item -Path "\\servername\filelocation" -Destination "\\$Computer\c$\Documents and Settings\All Users\Desktop\filename"
$details = "Copied"
}
else
{
#If not, don't copy the file
$details = "Not Copied"
}
#Store the information from …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 safari iOS 上使用 Aframe 流式传输 hls,其中 Aframe 在后台具有三个.js。但视频显示黑屏,仅播放音频。视频 src 的类型为 .m3u8。我试图通读很多相关的帖子,但似乎没有一个合适的解决方案。让 HLS 和 WebGL 在 iOS 上运行是一种一厢情愿的想法吗?如果没有,请有人帮我解决一个问题。
关于 github 上可用问题的一些讨论:
c# ×4
.net ×3
powershell ×3
.net-6.0 ×1
aframe ×1
asp.net ×1
c#-8.0 ×1
code-signing ×1
csv ×1
export-csv ×1
foreach ×1
gac ×1
generic-list ×1
html ×1
html5-video ×1
ios ×1
lambda ×1
list ×1
performance ×1
scope ×1
url-routing ×1
winforms ×1