Questions tagged «.net-core»

.NET Core是.NET Framework的开源继承者。它可以用于从服务器和数据中心到应用程序和设备的各种应用程序和垂直领域。Microsoft在Windows,Linux和macOS上支持.NET Core。


4
使用System.Text.Json异步反序列化列表
可以说,我请求一个包含许多对象列表的大json文件。我不希望它们一次全部出现在内存中,但我宁愿一个个地读取和处理它们。所以我需要将异步System.IO.Stream流转换为IAsyncEnumerable<T>。如何使用新的System.Text.JsonAPI来做到这一点? private async IAsyncEnumerable<T> GetList<T>(Uri url, CancellationToken cancellationToken = default) { using (var httpResponse = await httpClient.GetAsync(url, cancellationToken)) { using (var stream = await httpResponse.Content.ReadAsStreamAsync()) { // Probably do something with JsonSerializer.DeserializeAsync here without serializing the entire thing in one go } } }

2
如何获取.NET Core 3单文件应用程序以查找appsettings.json文件?
如何配置单文件.Net Core 3.0 Web API应用程序以查找appsettings.json与创建单文件应用程序相同的目录中的文件? 跑步后 dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true 该目录如下所示: XX/XX/XXXX XX:XX PM <DIR> . XX/XX/XXXX XX:XX PM <DIR> .. XX/XX/XXXX XX:XX PM 134 appsettings.json XX/XX/XXXX XX:XX PM 92,899,983 APPNAME.exe XX/XX/XXXX XX:XX PM 541 web.config 3 File(s) 92,900,658 bytes 但是,尝试运行会APPNAME.exe导致以下错误 An exception occurred, System.IO.FileNotFoundException: The configuration …

1
在Powershell中运行时与Visual Studio中运行时的HttpClient并发行为不同
我正在使用MS Graph API将数百万用户从本地AD迁移到Azure AD B2C,以在B2C中创建用户。我已经编写了一个.Net Core 3.1控制台应用程序来执行此迁移。为了加快进度,我正在同时调用Graph API。这很好-有点。 在开发过程中,从Visual Studio 2019运行时,我的性能达到了可接受的水平,但是为了测试,我从Powershell 7中的命令行运行。从Powershell中,对HttpClient的并发调用的性能非常糟糕。从Powershell运行时,HttpClient允许的并发调用数似乎是有限制的,因此,并发批处理中的调用(大于40至50个请求)将开始堆积。它似乎正在运行40至50个并发请求,同时阻止其余请求。 我不是在寻求异步编程方面的帮助。我正在寻找一种方法来解决Visual Studio运行时行为和Powershell命令行运行时行为之间的差异。从Visual Studio的绿色箭头按钮在发布模式下运行的行为符合预期。不从命令行运行。 我用异步调用填充任务列表,然后等待Task.WhenAll(tasks)。每次通话需要300到400毫秒。从Visual Studio运行时,它可以按预期工作。我并发执行1000个调用的批处理,每个处理都在预期的时间内完成。整个任务块比最长的单个调用花费几毫秒的时间。 当我从Powershell命令行运行相同的构建时,行为会改变。最初的40到50个通话会花费300到400毫秒,但是每个单独的通话时间会增加到20秒。我认为这些调用正在序列化,因此在其他等待时一次只执行40到50。 经过数小时的反复试验,我能够将其范围缩小到HttpClient。为了找出问题,我使用执行Task.Delay(300)并返回模拟结果的方法模拟了对HttpClient.SendAsync的调用。在这种情况下,从控制台运行的行为与从Visual Studio运行的行为相同。 我正在使用IHttpClientFactory,甚至尝试调整ServicePointManager的连接限制。 这是我的注册码。 public static IServiceCollection RegisterHttpClient(this IServiceCollection services, int batchSize) { ServicePointManager.DefaultConnectionLimit = batchSize; ServicePointManager.MaxServicePoints = batchSize; ServicePointManager.SetTcpKeepAlive(true, 1000, 5000); services.AddHttpClient(MSGraphRequestManager.HttpClientName, c => { c.Timeout = TimeSpan.FromSeconds(360); c.DefaultRequestHeaders.Add("User-Agent", "xxxxxxxxxxxx"); }) …

1
为什么用相同的输入调用Vector2.Normalize()的结果34次后会更改?
这是一个简单的C#.NET Core 3.1程序,该程序System.Numerics.Vector2.Normalize()循环调用(每次调用都具有相同的输入),并打印出结果归一化向量: using System; using System.Numerics; using System.Threading; namespace NormalizeTest { class Program { static void Main() { Vector2 v = new Vector2(9.856331f, -2.2437377f); for(int i = 0; ; i++) { Test(v, i); Thread.Sleep(100); } } static void Test(Vector2 v, int i) { v = Vector2.Normalize(v); Console.WriteLine($"{i:0000}: {v}"); } …
10 c#  .net  .net-core 


1
如何在使用Http.sys和URLPrefix时配置dotnet core 3来提供React SPA?
更改URLPrefix后,出现以下错误: SPA默认页面中间件无法返回默认页面'/index.html',因为找不到默认页面,并且没有其他中间件处理该请求。 因此,需要一些信息来告诉dotnet core有关前缀的信息,但是我似乎找不到正确的设置组合。 帮助非常感谢。 代码如下: HostBuilder的设置: public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseHttpSys(options => { options.AllowSynchronousIO = false; options.Authentication.Schemes = AuthenticationSchemes.None; options.Authentication.AllowAnonymous = true; options.MaxConnections = null; options.MaxRequestBodySize = 30000000; options.UrlPrefixes.Add("http://localhost:5005/Product/Site"); }); webBuilder.UseStartup<Startup>(); }); ConfigureServices: public override void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); services.AddSpaStaticFiles(configuration => { …

2
找不到适用于Linux Azure WebApp的指定框架'Microsoft.AspNetCore.App'版本'3.1.0'
问题 将.Net Core 2.2 Linux Web App升级到Azure中的.Net Core 3.1之后,该应用程序因Specified framework 'Microsoft.AspNetCore.App', version '3.1.0' was not found错误而关闭。我什至竭尽全力用.Net Core 3.1创建了一个新的Linux Web App,并且bash命令提示符仍然输出dotnet --list-runtimes为2.2.7。 细节 网站关闭 日志流 报告应用程序已关闭,因为找不到.net core 3.1。 创建了新的.net核心Web应用 中北部的3.1 Linux webapp,同样的问题 确保它在美国中北部运行 根据https://aspnetcoreon.azurewebsites.net/,应具有完整的.netCore 3.1支持 仍然是.net core 2.2.7 opt/dotnet/runtimes 列出了3、3.0和3.0.0,但没有列出3.1` 环境变量 我的环境变量在Azure列表中FRAMEWORK_VERSION = lts,而不是3.1 出版 这是使用Azure AppService Deploy任务从azure devops ci管道发布的。3.1在这里不可用,所以我选择了LTS 更新1 …

1
为什么我不能从“ System.IO.StreamWriter”转换为“ CsvHelper.ISerializer”?
尝试将人们的内容写入CSV文件,然后将其导出,但是我遇到了构建错误及其失败。错误是: cannot convert from 'System.IO.StreamWriter' to 'CsvHelper.ISerializer' 不知道为什么会这样,除非我确定我以这种方式完成了很多次。 private void ExportAsCSV() { using (var memoryStream = new MemoryStream()) { using (var writer = new StreamWriter(memoryStream)) { using (var csv = new CsvHelper.CsvWriter(writer)) { csv.WriteRecords(people); } var arr = memoryStream.ToArray(); js.SaveAs("people.csv",arr); } } }

3
进入控制器后进行后期绑定动态解析模型
我正在寻找一种在控制器中执行动作后解析模型的方法,描述问题的最简单方法是: public DTO[] Get(string filterName) { //How can I do this this.Resolve<MyCustomType>("MyParamName"); } 如果您正在寻找有关我为什么要这样做的更多信息,则可以继续阅读以获取完整信息。 TL; DR 我正在寻找一种解决模型请求的方法,给定一个始终从查询字符串中解析的参数名称。如何从启动动态注册过滤器。我有一个要处理注册过滤器的类。 在启动类中,我希望能够向我的restServices动态注册过滤器。我有一个用来传递给我的自定义ControllerFeatureProvider的选项,大致如下所示: public class DynamicControllerOptions<TEntity, TDTO> { Dictionary<string, Func<HttpContext, Expression<Func<TEntity, bool>>>> _funcNameToEndpointResolverMap = new Dictionary<string, Func<HttpContext, Expression<Func<TEntity, bool>>>>(); Dictionary<string, List<ParameterOptions>> _filterParamsMap = new Dictionary<string, List<ParameterOptions>>(); public void AddFilter(string filterName, Expression<Func<TEntity, bool>> filter) { this._funcNameToEndpointResolverMap.Add(filterName, …

1
在Netcore API 3.1中读取AuthorizationFilterContext
我有一个正在运行的netcore 2.2项目,在该项目中,我实施了一个自定义策略来检查API密钥。 在startup.cs中,我要像这样添加此策略 //Add Key Policy services.AddAuthorization(options => { options.AddPolicy("AppKey", policy => policy.Requirements.Add(new AppKeyRequirement())); }); 在我的AppKeyRequirement中,我从AuthorizationHandler继承并像这样解析传入请求中的键 protected override Task HandleRequirementAsync(AuthorizationHandlerContext authContext, AppKeyRequirement requirement) { var authorizationFilterContext = (AuthorizationFilterContext)authContext.Resource; var query = authorizationFilterContext.HttpContext.Request.Query; if (query.ContainsKey("key") && query.ContainsKey("app")) { // Do stuff 在netcore 3.1中不起作用 我收到以下错误: 无法将类型为“ Microsoft.AspNetCore.Routing.RouteEndpoint”的对象转换为类型为“ Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext”的对象。 在核心3及更高版本中执行此操作的正确方法是什么? 正如Kirk Larkin指出的那样,.net 3.0及更高版本中的正确方法是将IHttpContextAccessor注入到Auth处理程序中并使用它。 …

1
.Net Core 3 IStringLocalizer.WithCulture(CultureInfo)已过时
我已经将项目从.Net Core 2.2升级到.Net Core 3.0。 在尝试解决所有警告和错误之后,我现在尝试为该警告的解决方案提供资金: 'IStringLocalizer.WithCulture(CultureInfo)' is obsolete: 'This method is obsolete. Use `CurrentCulture` and `CurrentUICulture` instead.' 我正在使用它来更改每个登录用户的网站语言。我有此实现可更改每个用户的网站文化: public class CultureLocalizer : ICultureLocalizer { private readonly IStringLocalizer localizer; public CultureLocalizer(IStringLocalizerFactory factory) { var type = typeof(Resources.PageResources); var assemblyName = new AssemblyName(type.GetTypeInfo().Assembly.FullName); localizer = factory.Create("PageResources", assemblyName.Name); } // if we …

1
请求标头未转发到IdentityServer4
我正在使用ocelot作为我的微服务的API网关,并使用IdentityServer4进行身份验证。在ocelot配置文件中,我添加了“ AuthenticationOptions”并设置了api密钥。在启动中,添加身份服务器。在身份服务器中,我使用标头中的值来动态构建连接字符串。当我发送获取令牌的请求时,可以在身份服务中访问标头。但是当我发送带有令牌的下一个请求时,原始标头不可用。在身份服务中只能看到“主机”标头。 在将请求路由到身份服务器时,是否可以保留原始标头? Startup.cs(添加身份服务器) services .AddAuthentication() .AddIdentityServerAuthentication("APIParts", options => { options.Authority = "http://localhost:60168"; options.RequireHttpsMetadata = false; options.ApiName = "Parts"; options.SupportedTokens = SupportedTokens.Both; }); ocelot.json ReRoutes": [ { "DownstreamPathTemplate": "/connect/token", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 60168 } ], "UpstreamPathTemplate": "/token", "UpstreamHttpMethod": [ "Post" ] }, { "DownstreamPathTemplate": "/api/Parts/Inventory", …

1
防止控制台应用程序(.NET Core)打印“代码为0退出”。在VS2019中
当我在Visual Studio社区2019(版本16.3.1)中使用Ctrl + F5(无需调试即可启动)启动控制台应用程序(.NET Core)时,以下消息将附加在控制台窗口的末尾: C:\ HelloWorld \ bin \ Debug \ netcoreapp3.0 \ HelloWorld.exe(进程1672)退出,代码为0。 using System; namespace HelloWorld { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } } } 有什么方法可以防止Visual Studio 2019打印此消息?我尝试通过更改以下选项来防止该解决方案出现在“输出”窗口中,该选项包括:“工具”>“选项”>“调试”>“输出”窗口>“进程退出消息” =“关闭”,但是在控制台窗口中无效。 注意:此消息不会在Visual Studio 2017中显示。它只会在Visual Studio 2019中显示,并且仅在.NET Core应用程序中显示。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.