Tag: asp.net core

使用IConfigurationRoot将应用程序的连接字符串传递到ASP.NET 5中的存储库类库

我有一个ASP.NET 5 MVC Web应用程序,在Startup.cs中我看到了公共属性 IConfigurationRoot Configuration 正被设置为builder.Build(); 在整个MVC Web应用程序中,我可以做到 Startup.Configuration[“Data:DefaultConnection:ConnectionString”] 从appsettings.json文件中获取conn字符串。 如何使用构造函数注入将ASP.NET 5 MVC appsettings.json指定的连接字符串传递给我的存储库类库? 更新: 这是所有其他存储库inheritance的基本存储库(正如您所看到的,我现在在这里有一个硬编码连接字符串): public class BaseRepo { public static string ConnectionString = “Server=MYSERVER;Database=MYDATABASE;Trusted_Connection=True;”; public static SqlConnection GetOpenConnection() { var cs = ConnectionString; var connection = new SqlConnection(cs); connection.Open(); return connection; } } 在我的appsettings.json文件中的asp.net 5 Web应用程序中,我有以下内容,相当于将连接字符串添加到.net 4.5 webapp中的web.config: “Data”: { “DefaultConnection”: { […]

ASP.NET Core 2.0 HttpSys Windows身份validation失败并带有Authorize属性(InvalidOperationException:未指定authenticationScheme)

我正在尝试将ASP.NET Core 1.1应用程序迁移到ASP.NET Core 2.0。 该应用程序非常简单,涉及以下内容: 主持HttpSys(原WebListener) 使用Windows身份validation: options.Authentication.Schemes = AuthenticationSchemes.NTLM 允许匿名身份validation: options.Authentication.AllowAnonymous = true (因为有些控制器不需要身份validation) 需要身份validation的控制器使用[Authorize]属性进行修饰。 该项目编译并启动就好了。 它还提供不需要身份validation的控制器的操作。 但是,只要我使用[Authorize]属性命中控制器,就会出现以下exception: System.InvalidOperationException: No authenticationScheme was specified, and there was no DefaultChallengeScheme found. at Microsoft.AspNetCore.Authentication.AuthenticationService.d__11.MoveNext() — End of stack trace from previous location where exception was thrown — at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.AspNetCore.Mvc.ChallengeResult.d__14.MoveNext() — […]

如何在ASP.NET Core中解析ConfigureServices中的实例

是否可以从Startup中的ConfigureServices方法解析IOptions的实例? 通常,您可以使用IServiceProvider初始化实例,但在注册服务时此阶段没有它。 public void ConfigureServices(IServiceCollection services) { services.Configure( configuration.GetConfigurationSection(nameof(AppSettings))); // How can I resolve IOptions here? }

使用EntityFramework.Core从自引用表加载完整层次结构

解释为什么这个问题不同于: EF – 多个包括急切加载分层数据。 不好的做法? 可能的重复是基于意见的问题,如果这是一个不好的做法,而我的问题往往得到如何做的技术解决方案,独立于意见,如果这是一个好的做法。 我将此决定留给产品所有者,需求工程师,项目经理和想要该function的客户。 给出的答案要么解释为什么这是一个不好的做法,要么使用一种对我不起作用的方法(使用Include()和ThenInclude()产生硬编码深度,而我需要灵活的深度)。 在当前项目(.NET核心web api)中,我尝试从自引用表中加载层次结构。 经过谷歌搜索后,我很惊讶这样的任务(我认为这是微不足道的)似乎并不是微不足道的。 好吧,我有这个表来形成我的层次结构: CREATE TABLE [dbo].[Hierarchy] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Parent_Id] INT NULL, [Name] NVARCHAR (50) NOT NULL, PRIMARY KEY CLUSTERED ([Id] ASC), CONSTRAINT [FK_Hierarchy_Hierarchy] FOREIGN KEY ([Parent_Id]) REFERENCES [dbo].[Hierarchy] ([Id]) ); 在web api中,我尝试返回完整的层次结构。 一个可能特别的事情(可能会有所帮助)就是我要加载完整的表格。 我也知道我可以使用预先加载和导航属性(子项的Parent和InverseParent) _dbContext.Hierarchy.Include(h => h.InverseParent).ThenInclude(h => h.InverseParent)… 问题是这会加载硬编码深度(例如,如果我使用1 […]

如何正确地在MVC6中注入HttpContext

我的API中的数据服务层需要httpcontext中请求的信息,我读了这个问题 ,他们说我应该使用ActionContext而不是HttpContext.Current(在MVC6中停止)。 第一种方法是通过重写此方法来设置控制器内的数据: public void OnActionExecuting(ActionExecutingContext context) { var routeData = context.RouteData; var httpContext = context.HttpContext; … } 或者通过注入服务层使用DI public MyService(IContextAccessor contextAccessor) { _httpContext = contextAccessor.Value.HttpContext; _routeData = contextAccessor.Value.RouteData; } 但我不确定下面列出的这两行代码是否正确 services.AddTransient<IContextAccessor,ContextAccessor>(); services.AddTransient<IContextAccessor>(); 当我这样做时,我得到了这个错误。 尝试激活时无法解析“Microsoft.AspNet.Mvc.ActionContext”类型的服务 更新 project.json web项目 “DIMultiTenan.Infrastructure”: “”, “DIMultiTenan.MongoImplementation”: “”, “Microsoft.AspNet.Server.IIS”: “1.0.0-beta3”, “Microsoft.AspNet.Mvc”: “6.0.0-beta3”, “Microsoft.AspNet.StaticFiles”: “1.0.0-beta3”, “Microsoft.AspNet.Server.WebListener”: “1.0.0-beta3”

刷新ASP.Net核心标识中的用户cookie票证

在ASP.NET Core Web应用程序的控制器中,我想刷新存储在客户端上的cookie票证中的用户和声明。 客户端经过身份validation和授权,ASP.NET Core Identity将此信息存储在cookie票证中 – 现在在某些Controller操作中我想刷新cookie中的数据。 SignInManager具有刷新RefreshSignInAsync的function,但它不接受HttpContext.User作为参数。 [HttpPost(“[action]”)] [Authorize] public async Task Validate() { // todo: update the Client Cookie await _signInManager.RefreshSignInAsync(User); // wrong type } 如何刷新cookie?

如何从kproj引用csproj

我正在玩VS2015和ASP.NET vNext ,并试图在同一解决方案中尝试将vNext类库(kproj)的引用添加到常规类库(csproj)。 Visual Studio 2015显示以下错误消息: “以下项目不支持作为参考”。 是否有可能从vNext类库中添加对csproj的引用?

在C#类库中使用IConfiguration

我正在使用C#和Core .NET构建一个类库。 我试图使用config.json文件中的配置。 以下是该文件的内容: config.json { “emailAddress”:”someone@somewhere.com” } 在尝试使用config.json进行配置时,我在我的project.json文件中引用了Microsoft.Framework.ConfigurationModel.Json 。 在我的代码中,我有以下内容: MyClass.cs using Microsoft.Framework.ConfigurationModel; public class MyClass { public string GetEmailAddress() { // return ConfigurationManager.AppSettings[“emailAddress”]; This is the approach I had been using since .NET 2.0 return ?; // What goes here? } } 从.NET 2.0开始,我一直在使用ConfigurationManager.AppSettings[“emailAddress”] 。 但是,我现在正试图通过IConfiguration学习如何以新方式实现这一目标。 我的问题是,这是一个类库。 出于这个原因,我不确定配置文件的加载方式,地点或时间。 在传统的.NET中,我只需要为ASP.NET项目命名文件web.config,为其他项目命名app.config。 现在,我不确定。 我有一个ASP.NET MVC 6项目和一个XUnit项目。 […]

MVC6国家下拉列表

我正在尝试使用MVC6 Tag Helpers创建CountryCode和CountryName的下拉列表,以便用户在注册后可以选择他们的国家/地区。 到目前为止,视图的相关部分看起来像这样 viewmodel的相关部分看起来像这样 [Display(Name = “Country”)] public string CountryCode { get; set; } public IEnumerable Countries { get; set; } 国家看起来像这样 public partial class Country { [Key] public string CountryCode { get; set; } public string CountryName { get; set; } public virtual ICollection Users { get; set; } } 控制器将视图模型返回国家/地区列表 var model […]

如何在ASP.NET Core 1.0的DI中的Startup类中添加IHttpContextAccessor?

在ASP.NET Core RC 1中,我使用以下代码来检索上下文的值(页面的完整地址)。 然后我在配置中记录了这个值。 public class Startup { public IConfigurationRoot Configuration { get; set; } private IHostingEnvironment CurrentEnvironment { get; set; } private IHttpContextAccessor HttpContextAccessor { get; set; } public Startup(IHostingEnvironment env, IHttpContextAccessor httpContextAccessor) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile(“appsettings.json”, optional: true, reloadOnChange: true) .AddJsonFile($”appsettings.{env.EnvironmentName}.json”, optional: true); if (env.IsDevelopment()) { builder.AddUserSecrets(); } […]