Tag: asp.net core

如何在ASP.NET Core中处理多值cookie?

在完整的.NET框架中,我们支持多值cookie。 例如,cookie可以有多个值: HttpCookie aCookie = new HttpCookie(“userInfo”); aCookie.Values[“userName”] = “patrick”; aCookie.Values[“lastVisit”] = DateTime.Now.ToString(); 另请参阅有关MSDN上的HttpCookie.Values和MSDN上的 ASP.NET Cookie概述 的文档 。 使用ASP.NET Core,多值cookie似乎消失了。 没有HttpCookie.Values和HttpRequest.Cookies返回一个IRequestCookieCollection ,就像从string到string的dictionary一样 我现在应该如何在ASP.NET Core中创建和读取多值cookie? 我怎样才能阅读在Full ASP.NET中创建的多值cookie并在ASP.NET Core中读取它们?

ASP.NET Core中的路由消歧(MVC 6)

当ASP.NET Core遇到含糊不清的命名路由时,它变得惰性。 也就是说,应用程序将在没有抛出exception的情况下运行,但是,它将无法在任何控制器上处理任何请求。 主叫客户端收到500个响应。 我将展示我是如何陷入这个烂摊子的,我想知道如何修复它。 我有一个看起来像这样的控制器: [Route(“api/Subscribers/{id}/[controller]”)] [Route(“api/Organizations/{id}/[controller]”)] public class AddressesController : Controller { [HttpGet(“{aid}”, Name = “PostalLink”)] public async Task GetAddress(Guid id, Guid aid) { //…implementation is irrelevant for this question. } [HttpPost] [SwaggerResponseRemoveDefaults] [SwaggerResponse(HttpStatusCode.Created, Type = typeof(PostalRecord))] public async Task CreateAddress(Guid id, [FromBody] PostalAddress address) { address.ID = Guid.NewGuid(); await createAddress.Handle(address); return CreatedAtRoute(“PostalLink”, […]

Json post int类型总是0

[HttpPost(“method”)] public string Method(int number) { return number.ToString(); } 为什么数字总是0? 它可以使用像这样的原始类型的json post吗? 我的post:{“number”:3}

如何为ASP.NET 5应用程序设置区域设置?

我正在尝试对ASP.NET 5 Web应用程序的主机区域设置进行全面覆盖。 大多数解决方案都引用 web.config元素,但这是特定于IIS的,似乎不适合新的ASP.NET模型。 我试过了: app.Use(next => context => { Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(“en-AU”); Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(“en-AU”); return next(context); }); 这会被执行,但这似乎对请求没有任何影响(可能是由于管道中的广泛Task ?)有没有更好的方法来实现这一点?

如何在ASP.NET Core中启用跟踪日志记录?

我无法在我的应用程序中获得basice LogTrace(…)输出。 这是一个复制品: 使用Visual Studio 2017创建新的ASP.NET Core应用程序。 (可选)注释掉.UseApplicationInsights()以使.UseApplicationInsights()更清晰 用这个替换ValuesController.cs的代码: using System.Collections.Generic; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; namespace WebApplication1.Controllers { [Route(“api/[controller]”)] public class ValuesController : Controller { private readonly ILogger logger; public ValuesController(ILogger logger) { this.logger = logger; } [HttpGet] public IEnumerable Get() { logger.LogError(“ERROR!”); logger.LogWarning(“WARN!”); logger.LogInformation(“INFO!”); logger.LogTrace(“TRACE!”); return new string[] { “value1”, “value2” }; } } […]

在dotnet核心中读取json文件时出错“已达到inotify实例数量的已配置用户限制(128)”

我有一个控制台应用程序(在网络核心1.1中),它每隔1分钟在cron调度程序中安排一次。 在应用程序内部有调用配置文件。 我附上下面的代码。 public static T GetAppConfig(string key, T defaultValue = default(T)) { T value = default(T); logger.Debug($”Reading App Config {key}”); try { var environmentName = Environment.GetEnvironmentVariable(“ASPNETCORE_ENVIRONMENT”); var builder = new ConfigurationBuilder() .AddJsonFile($”appsettings.json”, true, true) .AddJsonFile($”appsettings.{environmentName}.json”, true, true) .AddEnvironmentVariables(); var configuration = builder.Build(); T setting = (T)Convert.ChangeType(configuration[key], typeof(T)); value = setting; if (setting == null) […]

ASP.NET Core UseSetting来自集成测试

我有一个集成测试项目,在测试类中使用.UseSetting() ,如下所示: public AccessTokenRetrieval() : base(nameof(AccessTokenRetrieval)) { var connectionString = GetConnectionString(); var dbSettings = new DbSettings(connectionString); _userGroupRepository = new UserGroupRepository(dbSettings); _roleRepository = new RoleRepository(dbSettings); _userRepository = new UserRepository(dbSettings); _server = new TestServer(new WebHostBuilder() .UseStartup() .UseEnvironment(“IntegrationTest”) .UseSetting(“IntegrationTestConnString”, dbSettings.IdentityServerConnectionString)); _handler = _server.CreateHandler(); _client = _server.CreateClient(); } 我现在想在我的实际项目的Startup.cs中检索该设置。 我试图这样做: public void ConfigureIntegrationTestServices(IServiceCollection services) { var connectionString = Configuration.GetValue(“IntegrationTestConnString”); […]

WebClient.CancelAsync – 文件仍在下载

我正在尝试使用Asp.NET Core创建一个Web API,它公开路由以启动和取消大文件的长下载。 服务器应该能够同时处理多个下载。 使用WebClient.DownloadFileAsync执行下载,以便缩短响应时间并返回downloadId供以后使用。 WebClient的实例作为值存储在静态字典中,其对应的key自然是downloadId 。 应通过访问与downloadId键对应的字典值检索的客户端实例上的WebClient.CancelAsync取消downloadId 。 以下代码在下载完成而未被取消时完美运行; 正确调用AsyncCompletedEventHandler(在这种情况下为OnDownloadFileCompleted )。 问题 :当调用WebClient.CancelAsync ,文件继续下载,并且不会立即调用OnDownloadFileCompleted 。 WebClient似乎要等到下载完成后再调用处理程序。 但是,在这两种情况下,都正确设置了AsyncCompletedEventArgs.Canceled属性(例如,如果确实调用了WebClient.CancelAsync ,则为true 。 我错过了什么吗? 是否有更好/更智能的模式来处理WebAPI中的多个下载? 任何帮助将非常感谢! DownloadController.cs [Route (“api/download”)] public class DownloadController { private readonly DownloadService service; public DownloadController (DownloadService service) { this.service = service; } [Route (“start”)] [HttpPost] public string Start ([FromForm] string fileUrl) => this.service.StartDownload (fileUrl); […]

如何在ASP.net Core中基于环境添加DbContext

这就是我目前在Startup.cs中的ConfigureServices方法中添加DbContext的方法: public void ConfigureServices(IServiceCollection services) { ….. services.AddDbContext(options => options.UseMySQL(Configuration.GetConnectionString(“DefaultConnection”))); ….. } 我的连接字符串存储在我的appsettings.json文件中,例如: { …. “ConnectionStrings”: { “DefaultConnection”: “server=localhost;user id=root;password=root;database=mydb;sslmode=none” } …. } 如果我想切换正在连接的数据库,如果它是“开发”与“生产”环境,如何使“services.AddDbContext()”切换数据库?

在ASP.NET Core中启用来自同一会话的并发请求

编辑:这显然是在浏览器中测试的问题,而不是代码。 默认情况下,Core中的会话将被禁用。 原始问题: 我正在开发一个Web API,它需要同时处理多个请求,即使是来自同一个客户端。 它是一个ASP.NET核心MVC(1.1.2)应用程序,目前针对完整框架(4.5.2),主要是为了与其他库兼容。 当我第一次测试我的并发性时,我很惊讶这些请求根本不是并发的。 我用Google搜索并发现ASP.NET不会同时处理会话中的请求,而是将它们排队。 快速测试表明会话可能是罪魁祸首: [HttpGet(“sleep”)] public string Sleep() { Thread.Sleep(5000); return $”Done at {DateTime.Now:u}”; } 当我从同一浏览器中的多个选项卡快速请求时,每个选项卡之间需要5秒钟。 当我使用多个浏览器时,情况并非如此,它会在5秒钟内响应多次。 在搜索解决方案时,我一直在寻找在ASP.NET中禁用会话状态的方法,但对Core来说却没有。 就会话而言,我使用的是默认的API项目模板,而我没有采取任何措施来专门启用/设置会话状态。 有没有办法摆脱ASP.NET Core中的会话状态? 或者是否有更好的解决方案来启用并发请求?