Tag: asp.net core 2.0

ASN.NET Core 2.0 Facebook身份validationExternalLoginSignInAsync失败(IsNotAllowed)

我正在使用Ddentity在ASP.NET Core 2.0中创建一个新的应用程序。 我根据文档启用了Facebook身份validation。 现在正在运行的流程如下: 当新用户从Facebook进行身份validation时,应用程序会要求发送电子邮件以便用于该应用程序 当用户提供电子邮件时,在我的dbo.AspNetUsers表中创建用户并使用用户提供的电子邮件,并在我的dbo.AspNetUserLogins中创建一个新行,并引用提供者,providerKey和userId。 那时我可以看到在我的数据库中所有行都有正确的数据。 现在,当用户注销并尝试在某个时候再次使用facebook登录时,应用程序会检查用户是否可以通过以下方式使用提供者凭据登录: // Sign in the user with this external login provider if the user already has a login. var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false, bypassTwoFactor: true); 此时,我的结果是NotAllowed(属性IsNotAllowed = true),它要求用户输入新的电子邮件(就像新用户的原始流程一样)。 当然,电子邮件已经注册,用户无法创建新帐户,因为他不应该这样做。 我的ExternalLoginCallback控制器是项目的默认实现。 [HttpGet] [AllowAnonymous] public async Task ExternalLoginCallback(string returnUrl = null, string remoteError = null) { […]

asp.net core 2.0中System.Web.Hosting.HostingEnvironment.RegisterObject的替代方案

我有一个遗留应用程序,其中使用HostingEnivronment.RegisterObject。 我的任务是将其转换为asp.net core 2.0。 但是我无法找到实现这个的方法,或者在asp.net core 2.0中找到替代方法。 命名空间Microsoft.AspNetCore.Hosting.Internal不包含registerobject方法,也没有IRegisteredObject接口。 我对如何实现这一点感到茫然。

.Net Core 2.0中Controller和BaseController中的dependency injection重复

如果我在我的Asp.Net Core 2.0 Web应用程序中创建一个BaseController,其中包含一些常见的依赖关系,它们仍然是实际控制器中必需的。 例如,默认MVC 6 Web应用程序中的标准Account和Manage控制器。 public class AccountController : Controller { private readonly UserManager _userManager; private readonly SignInManager _signInManager; private readonly IEmailSender _emailSender; private readonly ILogger _logger; public AccountController( UserManager userManager, SignInManager signInManager, IEmailSender emailSender, ILogger logger) { _userManager = userManager; _signInManager = signInManager; _emailSender = emailSender; _logger = logger; } //rest of […]

在ASP.Net Core 2 MVC中禁用模型validation的正确方法

使用扩展方法设置MVC services.AddMvc() 然后在控制器中,这也可以应用于GET,使用正文中提供的参数为POST操作创建一个方法,例如 [HttpPost(“save”)] public Entity Save([FromBody]Entity someEntity) 当调用该操作时,MVC管道将调用ParameterBinder,后者又调用DefaultObjectValidator 。 我不想要validation(一件事情很慢,但更重要的是循环复杂的循环图),但似乎关闭管道validation的唯一方法是这样的: public class NonValidatingValidator : IObjectModelValidator { public void Validate(ActionContext actionContext, ValidationStateDictionary validationState, string prefix, object model) { } } 并在StartUp / ConfigureServices中: var validator = services.FirstOrDefault(s => s.ServiceType == typeof(IObjectModelValidator)); if (validator != null) { services.Remove(validator); services.Add(new ServiceDescriptor(typeof(IObjectModelValidator), _ => new NonValidatingValidator(), ServiceLifetime.Singleton)); } […]

将ASP.Net Core 2(.NET Framework)Web Api拆分为类库和托管项目是否可行/明智?

我正在尝试使用Visual Studio 2017(v15.4.5)将现有的WCF Web API(以.NET Framework 4.6.1为目标)移植到ASP.Net Core 2,并且无法找出组织项目的良好/通用/支持方式,以及他们应该是什么类型的项目。 例如: 用于服务器和托管的单个项目, 或用于托管的服务器和控制台应用程序的类库 用于控制台应用程序的Windows经典桌面项目和(新样式csproj)服务器库或两个Web应用程序的Web应用程序(一个输出类库,另一个输出控制台应用程序) 我有一种潜在的怀疑,即我缺少一些基本的东西,这意味着一种方法应该优于其他方法,或者甚至是强制性的,但是发现很难从ASP.Net Core 2文档中发现这种方法。 具体要求 应该以.NET Framework 4.6.1为目标 由于我需要从Web API的内部访问Windows注册表,因此我的目标是.NET Framework 4.6.1而不是.NET Core。 主机使用HTTP.sys 我打算将来使用Windows身份validation,并相信Kestrel不会支持(基于HTTP.sysfunction )。 主机应作为Windows服务运行 最终,Web API应由Windows Installer安装并作为服务运行。 目前,我只是想让API独立构建/工作,但也希望能够深入了解项目选择如何影响发布/部署。 首选方案 虽然默认情况下,新的ASP.NET Core 2 Web应用程序是输出控制台应用程序的单个项目,但我更倾向于将解决方案拆分为2个主要项目: “服务器” – 包含Web API,控制器和启动类的业务逻辑的ASP.NET Core 2(.NET Framework) 类库 “主机” – 控制台应用程序,它引用“服务器”并负责托管Web API 这种安排对我来说似乎很合适,因为任何单元/集成测试项目都可以引用“Server”类库,而不是可执行文件(根据建议, 在C#项目中引用exe文件是不好的做法 )。 此外,我认为这是合理的,因为我可以在项目属性中将输出类型更改为“类库”。 我假设因为我的目标是.Net […]

在c#HttpClient 4.5中发布multipart / form-data

问题 我正在尝试发布API以将数据发送到API,该API调用我的内部API服务以将该数据发送到其他API i服务。 实体包含带文件的属性。 这只将文件发送到另一个派生,但NameSender属性不随文件一起发送。 实体 public class Email { public string NameSender{ get; set; } public List Files { get; set; } } API [Consumes(“multipart/form-data”)] [HttpPost] public IActionResult SendEmail([FromForm]Entity entity) { try { string Servicesfuri = this.serviceContext.CodePackageActivationContext.ApplicationName + “/” + this.configSettings.SendNotificationServiceName; string proxyUrl = $”http://localhost:{this.configSettings.ReverseProxyPort}/{Servicesfuri.Replace(“fabric:/”, “”)}/api/values/Send”; //attachments var requestContent = new MultipartFormDataContent(); foreach (var […]

未指定authenticationScheme,并且未找到具有默认身份validation和自定义授权的DefaultChallengeScheme

我有一个net core 2.0应用程序和授权问题。 我想使用特殊request.header和标准默认身份validation的自定义授权。 首先,我在startup.cs中添加配置: public IServiceProvider ConfigureServices(IServiceCollection services) { … services.AddAuthorization(options => { options.AddPolicy(DefaultAuthorizedPolicy, policy => { policy.Requirements.Add(new TokenAuthRequirement()); }); }); services.AddSingleton(); … } 和AuthTokenPolicy.cs public class AuthTokenPolicy : AuthorizationHandler { protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, TokenAuthRequirement requirement) { var filterContext = context.Resource as AuthorizationFilterContext; var response = filterContext.HttpContext.Response; try { // some validation […]

ASP.Net Core 2.0混合身份validationJWT和Windows身份validation不接受凭据

我在asp.net core 2.0中创建了API,我正在使用混合模式身份validation。 对于某些控制器JWT和一些使用Windows身份validation。 我对使用JWT授权的控制器没有任何问题。 但对于我想要使用Windows身份validation的控制器,我无限期地提示使用chrome的用户名和密码对话框。 这里是我的示例控制器代码,我想使用Windows身份validation而不是JWT。 [Route(“api/[controller]”)] [Authorize(AuthenticationSchemes = “Windows”)] public class TestController : Controller { [HttpPost(“processUpload”)] public async Task ProcessUploadAsync(UploadFileModel uploadFileModel) { } } 我的配置服务代码 public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(options => { options.DefaultAuthenticateScheme = IISDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(“Bearer”, options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateAudience = false, ValidateIssuer = […]

如何为使用AutoMapper和dependency injection的.net core 2.0服务编写xUnit测试?

我是.net核心/ C#编程的新手(来自Java) 我有以下Service类,它使用dependency injection来获取AutoMapper对象和数据存储库对象,以用于创建SubmissionCategoryViewModel对象的集合: public class SubmissionCategoryService : ISubmissionCategoryService { private readonly IMapper _mapper; private readonly ISubmissionCategoryRepository _submissionCategoryRepository; public SubmissionCategoryService(IMapper mapper, ISubmissionCategoryRepository submissionCategoryRepository) { _mapper = mapper; _submissionCategoryRepository = submissionCategoryRepository; } public List GetSubmissionCategories(int ConferenceId) { List submissionCategoriesViewModelList = _mapper.Map<IEnumerable, List>(_submissionCategoryRepository.GetSubmissionCategories(ConferenceId) ); return submissionCategoriesViewModelList; } } 我正在使用Xunit编写unit testing。 我无法弄清楚如何为方法GetSubmissionCategories编写unit testing,并让我的测试类提供IMapper实现和ISubmissionCategoryRepository实现。 到目前为止,我的研究表明我可以创建依赖对象的测试实现(例如SubmissionCategoryRepositoryForTesting),或者我可以使用模拟库来创建依赖接口的模拟。 但我不知道如何创建AutoMapper的测试实例或AutoMapper的模拟。 如果你知道任何好的在线教程,详细介绍如何创建一个unit testing,其中被测试的类使用AutoMapper和dependency injection一个很好的数据存储库。 […]

在ASP.NET Core 2.0中从另一个(无用户交互)授权一个应用程序服务

我在面向Internet(PubWeb)的Azure中有一个Web API应用程序,因此它可以在任何地方使用。 我创建了一个Web API(再次,在Azure中,我们称之为InWeb)。 我想要强有力的安全规则: InWeb必须仅由PubWeb使用。 这可能涉及一些网络安全 – 这是一个简单的部分(在Azure中)。 PubWeb必须以某种方式由Azure AD授权才能使用InWeb服务。 我想到了服务负责人,证书等。 但我不确定。 那么2的最佳解决方案是什么? 更新 – 这里是InWeb Core 2.0 Auth设置: public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(sharedOptions => { sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddAzureAdBearer(options => Configuration.Bind(“AzureAd”, options)); services.AddMvc(options => { options.InputFormatters.Add(new TextPlainInputFormatter()); }); }