我已经阅读了许多密切相关的问题,但没有一个能够完全达到这个问题.如果是重复,请发给我一个链接.
我正在使用一个有角度版本的flowjs库来进行HTML5文件上传(https://github.com/flowjs/ng-flow).这非常有效,我能够以1MB的块同时上传多个文件.有一个ASP.Net Web API文件控制器接受这些并将它们保存在磁盘上.虽然我可以做到这一点,但我并没有有效地做到这一点,并且想要了解更好的方法.
首先,我在异步方法中使用了MultipartFormDataStreamProvider,只要将文件上传到一个块中,该方法就能很好地工作.然后我切换到只使用FileStream将文件写入磁盘.只要块按顺序到达,这也有效,但当然,我不能依赖它.
接下来,为了看到它工作,我将块写入单个文件流并在事后合并它们,因此效率低下.一个1GB的文件将生成一千个上传完成后需要读取和重写的块.我可以将所有文件块保存在内存中,并在它们全部上传后刷新它们,但我担心服务器会爆炸.
似乎应该有一个很好的异步解决方案来解决这个困境,但我不知道它是什么.一种可能性是在写入当前块时使用async/ await组合先前的块.另一个可能是使用Begin/ EndInvoke来创建一个单独的线程,以便磁盘上的文件操作独立于从中读取的线程处理,HttpContext但这将依赖于ThreadPool我,我担心当我的MVC控制器时创建的线程将被过度终止回报.我可以创建一个FileWatcher完全独立于ASP.Net的程序,但这将是非常笨拙的.
所以我的问题是,1)是否有一个我想念的简单解决方案?(似乎应该有)和2)如果没有,在Web API框架内解决这个问题的最佳方法是什么?
谢谢,鲍勃
Powershell展开让我发疯.
我有以下代码从交换收件人检索电子邮件地址.我正在使用ArrayList,因为当你想要从数组中删除项目时,很多人都建议使用它.
$aliases = New-Object System.Collections.ArrayList
$smtpAddresses = (Get-Recipient $this.DN).EmailAddresses | ?{$_.Prefix.ToString() -eq 'smtp' }
foreach ($smtpAddress in $smtpAddresses) {
$aliases.Add($smtpAddress.SmtpAddress)
}
return $aliases
Run Code Online (Sandbox Code Playgroud)
$ aliases的值在函数末尾是正确的(即将包含x个电子邮件地址并且类型为ArrayList)但在返回后它变为System.Object []并且具有2x个条目.有x Int32后跟x字符串(即{0,1,bob @ here,bob @ there}).为什么会发生这种情况以及如何保持ArrayList完好无损?我使用ArrayList错了吗?
出于好奇,由于PS展开导致的所有问题/问题,它的目的是什么?PowerShell的最大好处是你直接使用对象而不是文本投影,不幸的是,我从来不知道我正在使用什么样的对象 - 甚至当我检查时,它似乎没有保持其形状更多比几行代码.
- 编辑该函数作为PSObject的一部分调用
$get_aliases = { ... }
$obj | Add-Member -MemberType ScriptProperty -Name Aliases -Value $get_aliases -SecondValue $set_aliases
Run Code Online (Sandbox Code Playgroud) 有哪些方法可用于调试 ASP.NET Core 3.1 Web API 中的路由问题?具体来说,就是臭名昭著的 404。
我在 Web API 中看到了大量与此相关的问题,但它们都涉及个人的具体问题。我正在寻找一种系统的方法来确定我的网址如何/为何匹配或未能匹配路线集合中的每个路线。
不幸的是,即使设置为 Trace,日志输出也仅显示:
Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request starting HTTP/2.0 GET https://localhost:5000/Ctrlr/Action
Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request finished in 8.4141ms 404
Run Code Online (Sandbox Code Playgroud)
Phil Haack 的经典 ASP.NET MVC 路由调试器是一个很棒的工具,但我不相信它可以在 .NET Core 3 中使用。
我觉得我错过了一些巨大的东西,但我看起来没有成功。
谢谢
将 ASP Core 2 与 EF Core 和 SQL Server 一起使用。我有,我认为检索给定分销商的制造商(或单个制造商)列表是一项简单的任务。
Users 表提供经过身份验证的用户,每个用户都与一个分销商相关联(在模型中表示为_user)。因此,当在GetManufacturers()上调用操作时ManufacturersController,它应该返回给定分销商的所有制造商。同样,GetManufacturers(int id)如果它与经过验证的分销商相关联,则应返回单个制造商。
为此,我正在尝试各种公式,例如:
await _context.Manufacturers
.Include(a => a.Addresses)
.Include(m => m.DistributorManufacturers)
.Where (a => a.AddressesNavigation.State = "CA")
.Where (m => m.Id == id) // Manufacturers Id
.Where (d => d.DistributorManufacturers.DistributorId == _user.DistributorId)
.AsNoTracking()
.ToListAsyc()
Run Code Online (Sandbox Code Playgroud)
VS 抱怨ICollection<DistributorManufacturers>不包含定义DistributorId(即使我从类中复制/粘贴了它)。它与我的地址过滤器在概念上没有区别。
我也尝试.ThenInclude添加分销商表,但没有运气。
DistributorManufacturers 表是使用 Scaffold-DbContext 创建的,并定义了外键和导航属性。
我正在寻找使用 Invoke-Command 将 PsObject 传递到远程函数的最佳或正确方法。ConvertTo-Xml 非常适合序列化,但没有内置的反向 cmdlet。我在网上找到的解决方案都是针对具体内容的。
我实现了以下函数,这些函数适用于我测试的几个对象,但看起来相当老套。这是要咬我吗?有没有更好但仍然简单的解决方案?
function Get-TmpFileName () {...}
function Serialize-PsObject($obj) {
$tmpFile = Get-TmpFileName
Export-Clixml -InputObject $obj -Path $tmpFile
$serializedObj = Get-Content $tmpFile
Remove-Item $tmpFile
$serializedObj
}
function Deserialize-PsObject($obj) {
$tmpFile = Get-TmpFileName
$obj > $tmpFile
$deserializedObj = Import-Clixml $tmpFile
Remove-Item $tmpFile
$deserializedObj
}
Run Code Online (Sandbox Code Playgroud)