Tag: asp.net core

获取Startup.cs对象的参考

寻找知道ASP.NET MVC内部细节的高级ASP.NET架构师的答案。 这是标准ASP.NET核心应用程序的框架。 var config = new ConfigurationBuilder() .AddCommandLine(args) .AddEnvironmentVariables(prefix: “ASPNETCORE_”) .Build(); var host = new WebHostBuilder() .UseConfiguration(config) .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup() .Build(); host.Run(); 在这篇文章中,ASP.NET设备实例化了一个Startup.cs类的实例 .UseStartup() 我的查询是如何获取(引用)这个已经实例化的Startup对象实例,我可以插入到我的Library / Framework中。 上下文是设置一些Uber级别框架并获得此联结(Startup.cs)的引用,其中所有请求都已启动。

AspNetCore.Identity无法使用自定义用户/角色实现

因为我倾向于支持Guid作为我的主键类型,所以我的User和Role类实现如下 public class User : IdentityUser { } public class Role : IdentityRole { } 请注意, UserClaim , UserRole , UserLogin和RoleClaim都以相同的方式实现 这是我的DbContext实现 public class ApplicationDbContext : IdentityDbContext { } 到目前为止一切都很好,除了AspNetCore的新DI容器似乎不喜欢我的默认自定义实现。 我的Startup.cs文件中的以下代码行引发了下面显示的错误 services .AddIdentity() .AddEntityFrameworkStores() .AddDefaultTokenProviders(); GenericArguments [0],’NewCo.DomainModel.Models.Identity.User’,’Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore`4 [TUser,TRole,TContext,TKey]’违反了类型’TUser’的约束。 我假设这是因为默认的Identity gremlin被实现为使用IdentityUser ,我正在使用IdentityUser 。 接下来我该怎么办? (我完全没有想法) 注意:我正在构建截至周一(2016年6月27日)和Visual Studio Update 3(如果对任何人有任何帮助)的Microsoft官方.NET Core和ASP.NET Core版本

Asp.Net Core:在控制器外部使用内存缓存

在ASP.NET Core中,它很容易从控制器访问您的内存缓存 在您的初创公司中添加: public void ConfigureServices(IServiceCollection services) { services.AddMemoryCache(); } 然后从你的控制器 [Route(“api/[controller]”)] public class MyExampleController : Controller { private IMemoryCache _cache; public MyExampleController(IMemoryCache memoryCache) { _cache = memoryCache; } [HttpGet(“{id}”, Name = “DoStuff”)] public string Get(string id) { var cacheEntryOptions = new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromHours(1)); _cache.Set(“key”, “value”, cacheEntryOptions); } } 但是,如何在控制器外部访问相同的内存缓存。 例如。 我有一个由HangFire发起的计划任务,如何从我的代码中通过HangFire计划任务访问内存缓存? public class ScheduledStuff { […]

用户角色使用ASP.NET Core Identity 3的权限

我坚持使用我想在asp.net mvc核心应用程序中提供的解决方案。 我想在Web应用程序中提供标准用户,角色,权限的解决方案,以利用新的基于声明的方法。 我一直在关注Ben Foster的逻辑( http://benfoster.io/blog/asp-net-identity-role-claims )。 在下面的代码(演示质量)中,我将阐述我的方法,我将评论以帮助显示我快速而肮脏的测试解决方案。 我遇到的挑战是它不起作用。 //注意:我发现了这个错误,并会在未来用户寻找类似解决方案的地方发表评论。 种子类:这是一个快速而肮脏的解决方案,用两个新用户,两个角色和一个角色的一些声明为数据库播种。 我这样做是一个测试应用程序,用于学习管理我的应用程序授权的声明方法。 我的完整解决方案将为每个租户提供一种方式,通过UI创建自己的角色,将1个或多个声明与角色相关联,然后为用户分配角色。 我想为租户提供一种管理自己用户以及他们能做什么或不做什么的方法。 这是基于声明的方法的简单实现,因为权利要求比与策略的1:1关系具有更多的权力。 public class DbInitializer { private ApplicationDbContext _context; private RoleManager _roleManager; private UserManager _userManager; public DbInitializer(ApplicationDbContext context,RoleManager roleManager, UserManager userManager) { _roleManager = roleManager; _userManager = userManager; _context = context; } public async Task Initialize() { //RoleManager roleManager = new RoleManager(); […]

ASP.NET 5 beta 8中的Windows身份validation支持

我有一个ASP.NET 5 MVC 6 Web API项目。 大多数API端点都具有[Authorize]属性,并且在IIS和Visual Studio中项目的属性上都启用了Windows身份validation。 这一切在beta 7中运行良好。 然而,在测试版8中,这不起作用。 通过一个完全干净的项目很容易重现这个: 使用ASP.NET 5 Web API模板创建新项目。 获取项目的属性(不是解决方案),转到“调试”选项卡,启用Windows身份validation并禁用“匿名”。 保存更改。 按F5并让它尝试运行该项目。 结果: 尝试确定托管应用程序的DNX进程的进程ID时发生错误。 现在返回项目属性并启用Anonymous。 也启用Windows。 保存更改。 转到您的控制器并添加[Authorize]属性。 再次F5。 结果: 该项目启动,但Web API返回500.在“输出”窗口中注意: Microsoft.AspNet.Mvc.Controllers.ControllerActionInvoker:警告:filter“Microsoft.AspNet.Mvc.Filters.AuthorizeFilter”上的请求授权失败。 发布到IIS时,该项目也不起作用。 正如beta 8 声明中所述,托管模型已经发生变化,IIS正在将请求传递给Kestrel。 “ 服务器”页面未提供任何Kestrel支持Windows身份validation的指示。 是否有一些技巧可以让Windows身份validation在beta 8中运行?

ASP.NET核心WebAPI安全注意事项

我的WebAPI就是我的UI使用的API后端。 事实上,我的UI将使用10个WebAPI服务。 我很难理解在安全性方面我需要考虑的事项。 我的API使用承载令牌进行保护,并且仅允许https。 我有CORS设置,他们只允许来源https://my-front.end这一切都很好。 但是..如何防范C / XSRF并重放WebAPI上的攻击? 我还需要吗? 使用ASP.NET MVC项目设置反CSRF是相当轻松的,但是如何在WebAPI项目上完成它,据我所知,它依赖于将在服务器上生成的信息发送到客户端以便在请求的主体并通过另一个渠道(例如cookie或标题)。 我读过你可以通过使用nonce(例如时间戳和随机数)来防止重放攻击 – 一些如何 – 但是找不到任何实现示例。 还有什么我需要考虑的吗? 编辑:前端使用vue.js,但我们有一个非常称职的JS程序员,所以任何前端实现都不会有问题。 这只是找出需要做什么的问题! 值得注意的是,为了显而易见,WebAPI和FrontEnd在不同的服务器上运行,因此这些都是有效的跨域调用。

如何使用Reflection或其他准确方法获取控制器内的当前ASP.NET核心控制器方法名称

我想获取我的ASP.NET Core控制器的当前方法名称 我试过通过reflection获取方法名称: [HttpGet] public async Task CreateProcess(int catId) { string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name; 但这给了我一个MoveNext的值,而不是CreateProcess 请注意我不想使用ViewContext string methodName = ActionContext.RouteData.Values[“action”].ToString(); 因为我通过启动设置小写我的URL。上面将得到createprocess而不是CreateProcess 我最好想要一个简单的单行而不是多行扩展方法。

使用XUnit和ASP.NET Core 1.0进行dependency injection

我试图找出如何使用XUnit的dependency injection。 我的目标是能够将我的ProductRepository注入我的测试类。 这是我正在尝试的代码: public class DatabaseFixture : IDisposable { private readonly TestServer _server; public DatabaseFixture() { _server = new TestServer(TestServer.CreateBuilder().UseStartup()); } public void Dispose() { // … clean up test data from the database … } } public class MyTests : IClassFixture { DatabaseFixture _fixture; public ICustomerRepository _repository { get; set; } public MyTests(DatabaseFixture […]

ASP.NET MVC 6上每个控制器的特定JSON设置

我需要在ASP.NET MVC 6 webApi中为每个控制器设置特定的JSON设置。 我发现这个样本(我希望!)适用于MVC 5: 在每个控制器的ASP.NET WebAPI上强制使用CamelCase using System; using System.Linq; using System.Web.Http.Controllers; using System.Net.Http.Formatting; using Newtonsoft.Json.Serialization; public class CamelCaseControllerConfigAttribute : Attribute, IControllerConfiguration { public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor) { var formatter = controllerSettings.Formatters.OfType().Single(); controllerSettings.Formatters.Remove(formatter); formatter = new JsonMediaTypeFormatter { SerializerSettings = {ContractResolver = new CamelCasePropertyNamesContractResolver()} }; controllerSettings.Formatters.Add(formatter); } }

.net核心中的GZIP无法正常工作

我正在尝试将Gzip中间件添加到我的ASP.net核心应用程序中。 我添加了以下包: “Microsoft.AspNetCore.ResponseCompression”:“1.0.0” 在我的startup.cs for Configure Services方法中,我有以下内容: public void ConfigureServices(IServiceCollection services) { services.Configure(options => options.Level = CompressionLevel.Fastest); services.AddResponseCompression(options => { options.Providers.Add(); }); services.AddMvc(); } 在我的Configure方法中,我有以下内容: public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(Configuration.GetSection(“Logging”)); loggerFactory.AddDebug(); app.UseResponseCompression(); app.UseMvc(); } 但是,当我尝试加载页面时,它不会像Gzip一样压缩。 我已经使用了字符串响应和输出视图。 chrome中的响应标头如下所示: 我在视觉工作室开发的Windows机器上。 运行应用程序时,我尝试从Visual Studio(通过F5)运行,并从命令行使用“dotnet run”命令。 既没有输出GZip压缩。