Tag: asp.net core mvc

使用特定的HttpMessageHandler注入单实例HttpClient

作为我正在开发的ASP.Net核心项目的一部分,我需要从WebApi中与许多不同的基于Rest的API端点进行通信。 为了实现这一点,我使用了许多服务类,每个服务类都实例化一个静态HttpClient 。 基本上,我为WebApi连接的每个基于Rest的端点都有一个服务类。 下面是一个如何在每个服务类中实例化静态HttpClient的示例。 private static HttpClient _client = new HttpClient() { BaseAddress = new Uri(“http://endpointurlexample”), }; 虽然上述方法运行良好,但它不允许对使用HttpClient的服务类进行有效的unit testing。 为了让我能够进行unit testing,我有一个假的HttpMessageHandler ,我想在我的unit testing中用于HttpClient ,而HttpClient是如上所述实例化的,但是我无法将假的HttpMessageHandler作为unit testing的一部分。 HttpClient在服务类中保持整个应用程序中的单个实例(每个端点一个实例)的最佳方法是什么,但允许在unit testing期间应用不同的HttpMessageHandler ? 我想到的一种方法是不使用静态字段来保存服务类中的HttpClient ,而是允许使用单例生命周期通过构造函数注入来注入它,这将允许我使用所需的HttpMessageHandler指定HttpClient在unit testing期间,我想到的另一个选项是使用HttpClient工厂类,它在静态字段中实例化HttpClient ,然后可以通过将HttpClient工厂注入服务类来检索,再次允许使用相关的HttpMessageHandler进行不同的实现在unit testing中返回。 以上都没有感到特别干净,感觉必须有更好的方法吗? 有任何问题,请告诉我。

没有数据库提供程序配置EF7

使用Entity Framework 7和MVC6时,我似乎收到此错误消息 System.InvalidOperationException未配置任何数据库提供程序。 在设置服务时,通过在DbContext类或AddDbContext方法中覆盖OnConfiguring来配置数据库提供程序。 我相信我已经做了我应该做的一切,所以也许它是一个错误。 我使用的是Entity Framework的7.0.0-beta7版本。 我已经设置了我的DbContext,一个接口,所以我可以模拟DbContext(在EntityFramework 6中需要进行unit testing)。 我的服务将接口作为构造函数,我在MVC 6中设置了DI。 在我的Startup.cs文件中,我有以下内容 public void ConfigureServices(IServiceCollection services) { // entity framework services.AddEntityFramework() .AddSqlServer() .AddDbContext(options => options.UseSqlServer(Configuration[“Data:MyConnection:ConnectionString”]) ); // Add MVC services to the services container. services.AddMvc(); // new context on each request services.AddScoped(); } 我已经检查了我的connectionString,并且返回了一个有效的连接。 我还检查了我的服务,正在注入该对象,并且它不是null,因此应该全部工作。 我的config.json文件看起来像这样 { “Data”: { “MyConnection”: { “ConnectionString”: “Server=(local);Database=XXXX;Trusted_Connection=True;” […]

Web API中的MVC-6与MVC-5 BearerAuthentication

我有一个Web API项目,使用UseJwtBearerAuthentication到我的身份服务器。 启动时的配置方法如下所示: public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseJwtBearerAuthentication(options => { options.AutomaticAuthentication = true; options.Authority = “http://localhost:54540/”; options.Audience = “http://localhost:54540/”; }); // Configure the HTTP request pipeline. app.UseStaticFiles(); // Add MVC to the request pipeline. app.UseMvc(); } 这是有效的,我想在MVC5项目中做同样的事情。 我试着这样做: Web api: public class SecuredController : ApiController { [HttpGet] [Authorize] public IEnumerable<Tuple> Get() { […]

如何使用DI在Class Constructor中获取Microsoft.AspNet.Http.HttpContext实例

我正在MVC 6中构建一个一次性应用程序,并尝试使用不同的依赖架构。 我面临的问题是如何创建特定于应用程序的自定义“ MyAppContext ”对象。 这将需要来自HttpContext一些信息和来自数据库的一些信息,并且将是针对应用程序特定属性的请求范围的存储库。 我想将HttpContext的实例传递给’ MyAppContext ‘的构造函数。 我已经使用DI成功创建了一个带有IDataService接口的’ DataService ‘对象,这IDataService用。 与’MyAppContext’类的不同之处在于它在构造函数中有两个参数–‘ DataService ‘和Microsoft.AspNet.Http.HttpContext 。 这是MyAppContext类: public class MyAppContext : IMyAppContext { public MyAppContext(IDataService dataService, HttpContext httpContext) { //do stuff here with the httpContext } } 在启动代码中,我注册了DataService实例和MyAppContext实例: public void ConfigureServices(IServiceCollection services) { services.AddMvc(); //adds a singleton instance of the DataService using DI services.AddSingleton(); services.AddScoped(); […]

将图像添加到ASP.net核心

我想添加一个图像作为模型类的一部分,并将其显示在索引视图上。 我有问题要么将图像分类为byte []或iFormFile。 这就是我想要实现的目标 创建一个页面以插入员工列表 在索引页面中,能够列出员工并查看他们的图像。 这是模型。 Employee.cs using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; namespace MvcMovie.Models { public class Employee { public int ID { get; set; } [Required] public string FirstName { get; set; } [Required] public string LastName { get; set; } [Required] public string Nationality { […]

让autofac与mvc6 beta5一起使用

我正在尝试使用我正在处理的mvc6应用程序使用autofac。 我发现这篇博客文章似乎有点过时了。 它看起来像使用beta3位 我正在使用这个clr版本 1.0.0-beta5-11911 我的项目有这两个参考 “Autofac”: “4.0.0-alpha2”, “Autofac.Dnx”: “4.0.0-alpha2”, 在文章中讨论了如何修改startup.cs // Create the Autofac container builder. var builder = new Autofac.ContainerBuilder(); // Add any Autofac modules or registrations. builder.RegisterModule(new AutofacModule()); // Populate the services. builder.Populate(services); // Build the container. var container = builder.Build(); return container.Resolve(); 上面的代码抱怨builder.Populate(services); 给我一个错误 “IServiceDescriptor”类型在未引用的程序集中定义。 您必须添加对程序集“Microsoft.Framework.DependencyInjection.IServiceDescriptor,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = […]

在ASP.NET 5和MVC 6中从Web项目中分离启动配置的最佳方法

使用MVC5,创建一个引用所有层的引导程序项目非常容易,从而将UI层与对基础架构逻辑的引用分离开来。 该项目将包含启动配置逻辑,例如设置IoC容器。 这样做的方法是定义一个启动类: public class Startup { public static void Start() { // startup configuration (IoC etc) goes here } } 然后在AssemblyInfo.cs添加一行: [assembly: PreApplicationStartMethod(typeof(Startup), “Start”)] 不幸的是,这种方法不再适用于asp.net 5.我简要介绍了文档,但我发现的只是框架在Web项目中查找名为Startup的类。 我还看了一下Microsoft.AspNet.Hosting 源代码 ,它似乎负责查找Startup类。 我可以看到对配置类的一些引用,因此有可能通过使用某种配置设置来加载程序集,但我无法确认或确定哪个设置。 此外,如果这是真的,当在Startup类中加载文件本身时,如何使用config.json文件确定Startup类? 是否有不同的配置启动程序集的选项,例如使用环境变量?

ASP.NET 5针对两个或多个策略进行授权

是否可以针对两个或更多策略应用授权? 我使用的是ASP.NET 5,rc1。 [Authorize(Policy = “Limited,Full”)] public class FooBarController : Controller { // This code doesn’t work } 如果没有,我如何在不使用政策的情况下实现这一目标 有两组用户可以访问此控制器:“完整”和“有限”。 用户可以属于“完整”或“有限”,或两者都属于。 它们只需要属于两个组中的一个以访问该控制器。

ASP.NET Core RC2和.NET 4.5.1应用程序之间的共享cookie身份validation

我们有两个运行共享cookie身份validation的.NET应用程序。 一个是ASP.NET Core RC1应用程序,另一个是经典的.NET 4.5.1应用程序。 这是使用Startup.cs的Configuration方法中过时的Microsoft.Owin.Security.Cookies.Interop Configuration的: 这工作正常,但不支持RC2的方法。 我们如何才能使用RC2的共享cookie身份validation?

我应该如何从MVC 6视图中访问我的ApplicationUser属性?

我正在开发一个ASP.Net vNext / MVC6项目。 我正在掌握ASP.Net Identity。 ApplicationUser类显然是我应该添加任何其他用户属性的地方,这适用于Entity Framework,我的其他属性按预期存储在数据库中。 但是,当我想从我的视图中访问当前登录用户的详细信息时,问题就出现了。 具体来说,我有一个_loginPartial.cshtml ,我想在其中检索并显示用户的Gravatar图标,我需要该电子邮件地址。 Razor View基类具有User属性,这是一个ClaimsPrincipal 。 如何从此User属性返回到我的ApplicationUser ,以检索我的自定义属性? 请注意,我不是在问如何查找信息; 我知道如何从User.GetUserId()值中查找ApplicationUser 。 这是一个关于如何合理地解决这个问题的问题。 具体来说,我不想: 从我的视图中执行任何类型的数据库查找(关注点分离) 必须为每个控制器添加逻辑以检索当前用户的详细信息(DRY原则) 必须为每个ViewModel添加User属性。 这似乎是一个“横切关注点”,应该有一个集中的标准解决方案,但我觉得我错过了一块拼图游戏。 从视图中获取这些自定义用户属性的最佳方法是什么? 注意:似乎MVC团队通过确保UserName属性始终设置为用户的电子邮件地址,在项目模板中侧面解决了这个问题,巧妙地避免了他们执行此查找以获取用户的电子邮件地址! 这对我来说似乎有点欺骗,在我的解决方案中,用户的登录名可能是也可能不是他们的电子邮件地址,所以我不能依赖这个技巧(我怀疑还有其他属性我需要稍后访问)。