Tag: .net core

在ASP.NET Core MVC API控制器上对AuthorizeAttribute进行unit testing

我有一个ASP.NET核心MVC API与控制器需要进行unit testing。 控制器: using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Threading.Tasks; namespace TransitApi.Api.Controllers { [Route(“api/foo”)] public class FooController : Controller { private IFooRepository FooRepository { get; } public FooController(IFooRepository fooRepository) { FooRepository = fooRepository; } [HttpGet] [Authorize(“scopes:getfoos”)] public async Task GetAsync() { var foos = await FooRepository.GetAsync(); return Json(foos); } } } 我必须能够对AuthorizeAttribute的有效性进行unit testing。 我们的代码库中存在缺少属性和不正确范围的问题。 这个答案正是我正在寻找的,但在Microsoft.AspNetCore.Mvc.Controller没有ActionInvoker方法意味着我无法这样做。 […]

在.net Core中调用SOAP服务

我正在将一个.net 4.6.2代码移植到一个调用SOAP服务的.net Core项目中 。 在新代码中我使用C#(由于一些配置原因,我现在还不记得为什么)。 但我得到以下例外。 收到对https://someurl.com/ws/Thing.pub.ws:Something的HTTP响应时发生错误。 这可能是由于服务端点绑定不使用HTTP协议。 这也可能是由于服务器中止HTTP请求上下文(可能是由于服务关闭)。 请参阅服务器日志以获取更多详 投掷它的代码是 try { var binding = new BasicHttpsBinding(BasicHttpsSecurityMode.Transport); binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; var endpoint = new EndpointAddress(new Uri(“https://someurl.com/ws/TheEndpoint.pub.ws:AService”)); var thing= new TheEndpoint.AService_PortTypeClient(binding, endpoint); thing.ClientCredentials.UserName.UserName = “usrn”; thing.ClientCredentials.UserName.Password = “passw”; var response = await thing.getSomethingAsync(“id”).ConfigureAwait(false); } finally { await thing.CloseAsync().ConfigureAwait(false); } 它基于旧配置工作,调用服务是这样的, 我错过了什么? 我无法在网上找到很多这方面的信息。 希望您能够帮助我。 更新 Per […]

.Net核心/控制台应用程序/配置/ XML

我第一次尝试使用新的ConfigurationBuilder和Options模式进入.Net Core库。 很多很好的例子: https : //docs.asp.net/en/latest/fundamentals/configuration.html和这里的例子的一个很好的副本 第1项。它说这可以用于非MVC应用程序,但没有关于如何在没有MVC的情况下使用它的示例 – 特别是如果您使用的是自定义的强类型类。 我想看一个使用控制台应用程序显示DependencyInjection,Configuration和Logging设置的示例 。 第2项。它表示您可以回写,但没有关于如何将任何更改保留回文件存储的示例或文档。 我想看一个如何使用强类型类继续更改回配置的示例。 在Json或XML中? 第3项。所有示例都需要手动轰炸的初始文件 – 希望看到一个示例,其中初始json / xml文件是从强类型类创建的 (当应用程序有许多参数时会派上用场)。 如果我可以在这上花足够的时间(而不是重新发布文档中已有的例子),我会做的! 如果您知道有助于我的post/文档,我将不胜感激。

在Entity Framework Core中使用两列的一对多关系

在我的项目中,我有一个表格Translation ,可以翻译任何模型。 为实现此目的,该表有两个字段: Model和ModelId 。 Model属性包含一个表示模型类型的整数, ModelId具有此模型的id。 因此,例如: Product表的modeltype为id 1 。 要获取ID为317的产品的所有翻译,我搜索Model=1 AND ModelId=317 。 现在我想在Entity Framework Core中创建这种关系。 我的所有模型都inheritance自BaseModel类, BaseModel具有一个属性ModelType ,其中包含模型类型的id。 此字段未映射,因此在数据库中不可用。 我试图使用流畅的api创建关系,但它不允许我指定更多的列来过滤。 modelBuilder.Entity() .HasMany(bm => bm.Translations) // Extra filters 有没有办法创建这种关系,而无需为每个需要翻译的查询手动创建连接?

AWS Lambda环境变量和dependency injection

在将AWS Lambda与.NET Core v1.0一起使用时,是否有可用于使用dependency injection或模拟环境变量的最佳实践或文档? 作为一个例子,下面是一个示例Lambda函数ProcessKinesisMessageById ,它接受KinesisEvent并进行某种处理。 此处理的一部分涉及访问需要访问环境变量以进行设置的某种外部服务(如AWS S3或数据库)。 public class AWSLambdaFileProcessingService { private IFileUploadService _fileUploadService; // No constructor in the Lambda Function [LambdaSerializer(typeof(JsonSerializer))] public void ProcessKinesisMessageById(KinesisEvent kinesisEvent, ILambdaContext context) { Console.WriteLine(“Processing Kinesis Request”); _fileUploadService = new AWSFileUploadService(); // Can this be injected? (Constructor shown below) // some sort of processing _fileUploadService.DoSomethingWithKinesisEvent(kinesisEvent); } } // […]

为什么Finalize / Destructor示例在.NET Core中不起作用?

我试图了解终结和析构函数如何在C#中工作,我试图在System.Object.Finalize示例中运行代码(代码复制粘贴,没有做出任何更改),但输出与预期的不一样,它表明从不调用析构函数。 代码是: using System; using System.Diagnostics; public class ExampleClass { Stopwatch sw; public ExampleClass() { sw = Stopwatch.StartNew(); Console.WriteLine(“Instantiated object”); } public void ShowDuration() { Console.WriteLine(“This instance of {0} has been in existence for {1}”, this, sw.Elapsed); } ~ExampleClass() { Console.WriteLine(“Finalizing object”); sw.Stop(); Console.WriteLine(“This instance of {0} has been in existence for {1}”, this, sw.Elapsed); […]

dotnet pack项目参考

我非常喜欢在几个程序集之间分离function,例如,外观到数据提供程序,数据提供程序的合同以及数据提供程序实现本身…在我看来,它可以轻松地对单个组件进行unit testingfunction和将来很容易换掉一件事(在我的例子中,它使数据提供者易于更换)。 如果我使用3个项目创建解决方案并使用项目引用,那么当我在入口程序集上构建dotnet时,所有引用都将复制到输出文件夹中。 当我通过dotnet打包条目汇编项目来创建NuGET包时,NuGET包中只包含条目组件(而不是契约或数据提供者) 这似乎是设计上的; .NET Core dotnet-pack的文档说明了这一点 项目到项目引用未打包在项目中。 目前,如果您具有项目到项目的依赖关系,则每个项目必须有一个包。 我的问题是 – 为什么会这样? 如果我想将我的代码分成逻辑程序集,我不得不创建单独的NuGET包并引用它们,或者只是将我的所有代码都集成到一个程序集中。 有没有办法在NuGET包中包含项目引用? 我正在使用VS2017 / .NET Core v1.1(csproj,而不是xproj)

在.net core 1.0 WEB API Projects中设置应用程序图标

最近我在Visual Studio中开发了一个基于.net core 1.0和.net Framework 4.5.1的ASP.NET Web应用程序 这个应用程序生成一个.exe文件,我的主要问题是我无法在任何地方找到更改项目中已编译可执行文件图标的位置 在普通的Windows应用程序中,可以在Visual Studio中右键单击主项目轻松设置图标,然后进入“属性”,您可以在其中指定图标以及清单 我已经看到在“project.json”文件中可以在“packOptions”部分中指定“IconUrl”但这似乎仅在目标是NuGet包而不是像我的情况下的exe时才有用 关于如何实现这一点的任何建议? 提前致谢, 大卫

Asp.Net Core 2.0 Kestrel不提供静态内容

编辑:添加了红隼 使用IIS express运行Asp.Net Core 2.0应用程序时,静态文件(css,js)按预期提供。 但是,当通过“dotnet publish -o [targetDirectory]”和dotnet [website.dll]使用命令行/ Kestrel时,Kestrel不会提供任何静态内容。 利用浏览器F12,我看到Kestrel返回404错误。 仔细观察,当直接在浏览器中输入文件路径(localhost:5000 / css /cssfile.css)时,文件不会显示,但浏览器似乎重定向到“localhost:5000 / cssfile.css”,但仍然返回404错误(注意缺少的/ css /目录)。 我通过Visual Studio 2017创建了这个项目,并为新的MVC Core 2.0应用程序选择了默认值(安装了SDK)。 我已按照此处的步骤在 program.cs和startup.cs文件中启用静态文件。 这些实现“app.UseStaticFiles();” 和“.UseContentRoot(Directory.GetCurrentDirectory())”。 通过谷歌找到的文章似乎都没有帮助。 我已经validation了dotnet将静态内容复制到目标目录。 我错过了什么? 谢谢 // Program.cs public static IWebHost BuildWebHost(string[] args) => WebHost .CreateDefaultBuilder(args) .UseStartup() .Build(); // Startup.cs public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseExceptionHandler(“/Error/HandleError”); […]

IFormFile没有被dropzone uploadMultiple请求填充

我遇到的问题是IFormFile列表没有填充给定的文件,但是当我调用HttpContext.Request.Form.Files时; 然后我可以访问这些文件。 我更喜欢使用IFormFile,因为它似乎是新的Dotnet核心2.0的做事方式。 我有以下请求有效负载: 使用以下请求标头: 和Razor页面处理程序: public async Task OnPostSend(ConditionResponse conditionResponse) { var files = HttpContext.Request.Form.Files; } 条件响应模型: public class ConditionResponse { public List Plots { get; set; } public string Comments { get; set; } public List Files { get; set; } }