Tag: asp.net core

dependency injection:ASP vNext。 这是怎么回事?

因此,在我基于CQRS的错误跟踪Web-API中,我在进行unit testing之前重构了我的代码(诚然,应该首先考虑); 我有这个类和构造函数: public class BugCommandHandler : IBugCommandHandler { private BugContext db; public BugCommandHandler(BugContext bugContext) { db = bugContext; } //Interface implementation } 在我的控制器中,我有这个: public class BugsController : Controller { private IBugCommandHandler commandHandler; private BugContext db; public BugsController(BugContext bugContext, IBugCommandHandler bugCommandHandler) { db = bugContext; commandHandler = bugCommandHandler; } } 最后,在我的Startup类中,我已经注入了依赖项 services.AddSingleton(); 我的unit testing和手动集成测试都工作正常,因为我在没有DI的情况下手动调用它。 BugCommandHandler实现现在如何工作,就像它在构造函数中使用数据库上下文一样被调用( […]

如何包装和替换ASP.NET 5配置中的一个默认组件

ASP.NET 5(RC1)为我们提供了一个全新的配置模型,我们将配置添加/替换为ServiceDescriptor对象的集合。 替换默认实现很简单,例如: services.Add(ServiceDescriptor.Instance( new MyHttpContextAccessor())); 但是,我很难找到一种方法来扩展现有注册的额外行为(通过装饰)。 换句话说,我想用内部使用内置版本的自定义版本替换内置版本。 以这种方式扩展框架行为当然很常见。 例如: // How to get the instance here??? IHttpContextAccessor original = services.Last(service => service.ServiceType == typeof(IHttpContextAccessor)); services.Add(ServiceDescriptor.Instance( new HttpContextAccessorDecorator(original))); 请注意,使用IHttpContextAccessor只是一个示例,但确实有效地显示了问题。 services集合包含ServiceDescriptor对象,对于IHttpContextAccessor , ImplementationInstance和IHttpContextAccessor属性为空,从而无法获取该原始实例。 我们不能将一个IServiceProvider注入装饰器来延迟注册,因为一旦我们在装饰器中请求一个IHttpContextAccessor ,我们就会得到相同的装饰器,这将导致一个stackoverflowexception。 有趣的是,使用MVC 5和Web API,这实际上非常简单。 如何在ASP.NET 5中实现相同的function?

ASP.NET核心中的自定义RoleProvider与身份?

在过去的MVC版本中,我能够做到 <roleManager enabled="true" defaultProvider="…." … 在web.config中获取自定义角色提供程序,但似乎不再是这种情况。 基本上我想做的是: 用户登录。 成功时,从外部源获取用户角色。 将角色应用于用户以在代码中使用。 将用户角色与自定义RoleProvider中的角色相匹配 我如何在ASP.NET Core中执行此操作?

.NET Core Web项目 – 使用命令行参数

我想通过命令行参数将DbConnectionString传递给我的.NET Core Web API应用程序。 看完之后: .NET核心从Program.cs传递命令行Args到Startup.cs 我的Program.cs看起来像: public static void Main(string[] args) { var config = new ConfigurationBuilder() .AddCommandLine(args) .Build(); var host = new WebHostBuilder() .UseKestrel() .UseConfiguration(config) .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup() .Build(); host.Run(); } 所以现在……我已经将命令行参数添加到我的WebHostBuider的键值对配置集合中…… 但是,在Startup.cs中我注册了所有内容,例如我的DbContext(需要将DbConnectionString作为命令行arg传递) 我的启动构造函数如下所示: public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile(“appsettings.json”, optional: false, reloadOnChange: true) .AddJsonFile($”appsettings.{env.EnvironmentName}.json”, optional: true) .AddEnvironmentVariables(); […]

中间件中的HttpContext .NET核心保存实例

将HttpContext实例存储在中间件中是否安全? 例: public class TestMiddleware { private readonly RequestDelegate next; private HttpContext context; public TestMiddleware(RequestDelegate next) { this.next = next; } public async Task Invoke(HttpContext context) { try { this.context = context; 我想在其他私有方法中使用它来处理它,所以我可以将它作为参数传递给那些函数或使用它,如示例中所示。 但它是否安全?

未找到Visual Studio 2015上的ASP.NET 5 addMvc方法

我正在关注本教程: http : //www.asp.net/vnext/overview/aspnet-vnext/create-a-web-api-with-mvc-6来设置web api,我还没有把它做得很远。 一旦我添加了行: services.addMvc(); 我有一个例外,说找不到这个方法。 我在网上搜索并在这里找到了一个单独的问题/答案: http : //forums.asp.net/t/2026087.aspx但这没有帮助。 我的startup.cs看起来像这样: public void ConfigureServices(IServiceCollection services) { services.AddMvc(); } public void Configure(IApplicationBuilder app) { app.UseMvc(); app.UseWelcomePage(); } 还有我的project.json: { “webroot”: “wwwroot”, “version”: “1.0.0-*”, “exclude”: [ “wwwroot” ], “packExclude”: [ “node_modules”, “bower_components”, “**.kproj”, “**.user”, “**.vspscc” ], “dependencies”: { “Microsoft.AspNet.Server.IIS”: “1.0.0-beta2”, “Microsoft.AspNet.Diagnostics”: “1.0.0-beta1”, “Microsoft.AspNet.Mvc”: “6.0.0-beta1” }, […]

asp.net core 1 appsettings.production.json没有更新连接字符串

我使用在IIS上运行的.net核心RC1生产了一个应用程序。 我重新编写了应用程序,因为公司希望它在.net core1上,因为那是正式版本。 在我的.net核心RC1应用程序中,我有config.json和config.production.json,在生产版本中,我只是包含了我想要覆盖的设置,如连接字符串。 这工作得很好。 在.net core1中我有appsettings.json和appsettings.production.json。 但是,连接字符串似乎没有更新。 它似乎使用原始appsettings.json中的localdb。 appsettings.json: { “ConnectionStrings”: { “DefaultConnection”: “Server=(localdb)\\mssqllocaldb;Database=aspnet-DecisionEff-b32ae861-2422-4f88-839c-2a6d599fee45;Trusted_Connection=True;MultipleActiveResultSets=true” }, “Logging”: { “IncludeScopes”: false, “LogLevel”: { “Default”: “Debug”, “System”: “Information”, “Microsoft”: “Information” } } } appsettings.production.json: { “ConnectionStrings”: { “DefaultConnection”: “Server=mydb.server;Database=DbName;User ID=User;Password=password;Trusted_Connection=False; Connection Timeout= 30;” } } 在我的启动文件中,我确实将其设置为查找生产: var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile(“appsettings.json”, optional: true, reloadOnChange: true) […]

在ASP .NET 5中默认阻止匿名访问

我的团队和我正在ASP .NET 5中启动一个新的网站项目,我正在尝试建立我们的用户身份validation和授权策略的基础。 到目前为止,我已经设法使用[Authorize]和[AllowAnonymous]属性来有选择地定义授权策略控制器或操作。 我仍在努力实现的一件事是定义默认授权策略。 基本上,我希望每个控制器和操作的行为都像默认情况下具有[Authorize]属性一样,这样只有匿名用户才能访问专门标记为[AllowAnonymous]的操作。 否则,我们预计,在某些时候,有人会忘记向其控制器添加[Authorize]属性并将漏洞引入webapp。 我的理解是,通过在FilterConfig.cs中添加以下语句,可以在以前版本的ASP .NET中实现我想要做的事情: filters.Add(new AuthorizeAttribute()); …除了在MVC 6中不再存在FilterConfig.cs。根据如何使用mvc 6注册全局filter,asp.net 5我现在可以使用以下命令访问全局filter列表: services.ConfigureMvc(options => { options.Filters.Add(new YouGlobalActionFilter()); } …尝试过,看起来很好,但现在它是我无法找到的AuthorizeAttributefilter。 出于实验目的,我试图手工创建一个与AuthorizeAttributefilter等效的filter,并提出以下建议: public class LoginFilter: AuthorizeFilter { public LoginFilter(): base(new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build()) { } public override Task OnAuthorizationAsync(Microsoft.AspNet.Mvc.AuthorizationContext context) { if(!context.HttpContext.User.Identity.IsAuthenticated && context.ActionDescriptor is ControllerActionDescriptor) { var action = context.ActionDescriptor as ControllerActionDescriptor; if(!AcceptAnonymous(action.ControllerTypeInfo) && !AcceptAnonymous(action.MethodInfo)) […]

如何unit testingHttpContext.SignInAsync()?

SignInAsync()源代码 我遇到了unit testing的一些问题。 DefaultHttpContext.RequestServices为null 我试图创建AuthenticationService对象,但我不知道要传递什么参数 我该怎么办? 如何unit testingHttpContext.SignInAsync() ? 测试方法 public async Task Login(LoginViewModel vm, [FromQuery]string returnUrl) { if (ModelState.IsValid) { var user = await context.Users.FirstOrDefaultAsync(u => u.UserName == vm.UserName && u.Password == vm.Password); if (user != null) { var claims = new List { new Claim(ClaimTypes.Name, user.UserName) }; var identity = new ClaimsIdentity(claims, “HappyDog”); […]

如何在同一个项目中定位netcoreapp2.0和net461

我有一个项目,我想使用.net core 2.0,我相信它是netcoreapp2.0。 它还使用了.net 4.6.1创建的nuget包。 我可以控制这个nuget包,如果需要可以改变它。 它确实有netstandards 2.0作为nuget包导入。 如果我包含在我的cproj文件中: netcoreapp2.0 我收到这个警告: 包’Terryberry.Roes.Common 2017.9.29-mongo’使用’.NETFramework,Version = v4.6.1’而不是项目目标框架’.NETCoreApp,Version = v2.0’进行了恢复。 此软件包可能与您的项目不完全兼容。 以及有关system.net.sockets从4.3降级到4.1的错误。 4.6.1 nuget包有System.Net.Sockets 4.3所以我不确定它为什么要降级。 确切的错误供参考: 检测到的包降级:System.Net.Sockets从4.3.0升级到4.1.0。 直接从项目引用包以选择不同的版本。 MyNetCoreProject(> = 2017.2.0) – > Microsoft.VisualStudio.Web.BrowserLink(> = 1.1.2) – > Microsoft.Extensions.FileProviders.Physical(> = 1.1.1) – > NETStandard.Library(> = 1.6。 1) – > System.Net.Sockets(> = 4.3.0)MyNetCoreProject(> = 2017.2.0) – > Microsoft.VisualStudio.Web.BrowserLink(> = […]