小编Bla*_*ell的帖子

使用XUnit和ASP.NET Core 1.0进行依赖注入

我试图找出如何使用XUnit的依赖注入.我的目标是能够将我的ProductRepository注入我的测试类.

这是我正在尝试的代码:

public class DatabaseFixture : IDisposable
{
    private readonly TestServer _server;

    public DatabaseFixture()
    {
        _server = new TestServer(TestServer.CreateBuilder().UseStartup<Startup>());
    }

    public void Dispose()
    {
        // ... clean up test data from the database ...
    }
}

public class MyTests : IClassFixture<DatabaseFixture>
{
    DatabaseFixture _fixture;
    public ICustomerRepository _repository { get; set; }

    public MyTests(DatabaseFixture fixture, ICustomerRepository repository)
    {
        _fixture = fixture;
        _repository = repository;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是错误: 以下构造函数参数没有匹配的fixture数据(ICustomerRepository存储库)

这让我相信XUnit不支持依赖注入,只有它是一个Fixture.

有人能给我一种使用XUnit在我的测试类中获取ProductRepository实例的方法吗?我相信我正确启动了测试服务器,因此Startup.cs运行并配置DI.

c# asp.net xunit asp.net-core asp.net-core-1.0

8
推荐指数
1
解决办法
5994
查看次数

VS2015代码覆盖率不适用于ASP.NET Core 1.0(以前称为ASP.NET 5)中的测试

我有一个ASP.NET Core 1.0(以前称为ASP.NET 5)解决方案,包含几个类库(包)和一个ASP.NET MVC6项目.

我有一个测试库使用支持Core 1.0的新XUnit 2.0.

但是,出于某种原因,我的代码覆盖率在我正在通过的所有测试中运行时产生零结果.

默认情况下,ASP.NET Core 1.0项目由运行时内置在内存中,并且没有任何工件持久保存到磁盘.因此,在设置中,我为解决方案中的每个项目启用了"在构建时生成所有输出".现在,当我构建时,我看到pdb和dll文件正在输出到artifacts文件夹.我认为确保代码覆盖率可以在此之后工作,但仍然没有结果.

也许代码覆盖只是简单地不适用于新的.NET Core 1.0.如果有人对此有一些信息会很棒.

c# code-coverage xunit visual-studio visual-studio-2015

8
推荐指数
2
解决办法
2380
查看次数

将Angular 2与VS2015 Update 2一起使用 - 获取npm -not安装错误

我创建了一个空的核心1.0 Web应用程序,并添加了一个package.json文件,从此URL复制angular2快速启动package.json行.

我不断收到消息Dependencies - 未安装和npm - 未安装.

有谁知道为什么会这样?我是否必须在我的PC上实际安装node.js才能使Visual Studio能够使用它?鲍尔工作完美......

visual-studio node.js angularjs visual-studio-2015 asp.net-core-1.0

8
推荐指数
1
解决办法
3066
查看次数

在VS2015 asp.net core 1.0项目中使用gulp将文件从node_modules移动到wwwroot

当我创建一个新的ASP.NET Core 1.0应用程序时,我想使用npm而不是bower.所以我删除bower.json并另外删除wwwroot/lib文件夹中预先安装的所有内容.

我将package.json文件添加到我的解决方案中,其中包含以下dev依赖项:

"devDependencies": {
    "bootstrap": "3.3.7",
    "jquery": "3.1.0",
    "jquery-validation": "1.15.1",
    "jquery-validation-unobtrusive": "3.2.6"
}
Run Code Online (Sandbox Code Playgroud)

但是,NPM会将所有库下载到项目根目录中的node_modules文件夹中.

我相信这就是Gulp的用武之地.有人可以告诉我如何使用gulp将分发文件从node_modules发送到我的wwwroot目录.如果有任何我无法找到的教程,请链接.

node.js npm gulp visual-studio-2015 asp.net-core-1.0

8
推荐指数
1
解决办法
1987
查看次数

与自定义身份验证中的角色权限相比,ASP.NET核心身份中的角色声明

让我们暂时离开ASP.NET身份,让我们假设我们正在为我们的应用程序构建自定义身份验证/授权系统.

它将包含以下表格以获得完全的灵活性:
用户
角色
权限
UserRoles
RolePermissions

通过上述内容,我们可以拥有应用程序的完整用户管理部分,其中管理员可以说用户A具有角色B,其具有权限C,D,F.

上面的内容在过去一直对我有用,但现在可以使用ASP.NET Identity切换到ASP.NET Core MVC应用程序.

尝试利用Microsoft在UserManager中为您提供ASP.NET核心身份的一切我希望能够仍然实现上述目标,但是ASP.NET核心身份MVC方式.

我所知道的:
我可以轻松使用UserManager为用户和角色以及用户角色实现CRUD页面.

我想弄清楚:
我怎样才能复制"角色拥有哪些权限/操作?"的相同行为.概念.

我最初的猜测是你会将Claim与Roles结合使用.声明被分配给角色,即RoleClaims,然后角色被分配给用户.

通过这种方式,我可以使用Authorize标签检查控制器/操作方法之上的角色.另外在页面级别更进一步说如果用户的角色没有声明隐藏/显示删除按钮声明"DeleteProduct"有点像这个基于视图的授权文档所说的那样.

-

我试图弄清楚我是否正在使用这些东西走上正确的道路.任何建议或更正都会有所帮助.

c# asp.net asp.net-identity asp.net-core asp.net-core-identity

8
推荐指数
1
解决办法
9062
查看次数

尝试通过 XUnit 使用依赖项注入时出现未解析的构造函数参数错误

我的每个 XUnit 测试项目都有一个 appsettings.json 文件,该文件指定了一些设置。我一直使用 IConfiguration 的依赖注入来检索我的 Test Fixture 类中的这些设置。现在想起来,我完全不知道 IConfiguration 过去是如何解决的,因为 XUnit 项目中没有 Startup.cs 和 ConfigureServices 方法。但我发誓它有效。

以下内容曾经有效,但现在不起作用:

夹具:

public class TestFixture : IDisposable
{
    public IConfiguration Configuration { get; set; }

    public TestFixture(IConfiguration configuration)
    {
        Configuration = configuration;
    }
}
Run Code Online (Sandbox Code Playgroud)

测试类:

public class TestCases : IClassFixture<TestFixture>
{
    public TestCases(TestFixture fixture)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

我收到的错误如下:

消息:System.AggregateException:发生一个或多个错误。---- 类装置类型“MyProj.Tests.TestFixture”具有一个或多个未解析的构造函数参数:IConfiguration 配置 ---- 以下构造函数参数没有匹配的装置数据:TestFixture 装置

c# xunit xunit.net asp.net-core

8
推荐指数
1
解决办法
7149
查看次数

使用 Clean Architecture 从 ApplicationCore 库中的实体引用 Infrastructure 库中的 ApplicationUser

我正在按照Microsoft 架构指南创建 ASP.NET Core Web 应用程序。

该指南实现了非常简单的简洁架构模式。

如果您查看使用干净架构模式的示例项目,您将看到有一个包含 ApplicationUser.cs 类的Infrastructure/Identity文件夹。

我的问题:
我正在使用实体框架,ApplicationCore 类库中的一个业务实体需要包含一个 ApplicationUser 列表。ApplicationCore 库不应引用任何其他项目。它包含所有接口和业务实体。如何在我的基础设施/身份项目中保留 ApplicationUser 类,并且在不违反规则的情况下仍然在 ApplicationCore 项目中的业务实体之一中使用它。

我知道一种解决方案是不在我的基础设施项目中存储 ApplicationUser 实体。但是,我觉得它应该在那里,因为它在实现 IdentityUser 时将始终依赖于 Identity。

c# entity-framework-core asp.net-core-mvc asp.net-core clean-architecture

8
推荐指数
1
解决办法
1764
查看次数

使用System.Net.Http调用Delete Web API方法时传递正文内容

我有一个场景,我需要调用我的Web API Delete方法,如下所示:

// DELETE: api/products/{id}/headers
[HttpDelete("{id}/headers")]
public void DeleteProductHeaders(int id, [FromBody] string query)
{
}
Run Code Online (Sandbox Code Playgroud)

诀窍是,为了获得查询,我需要通过正文发送它,而DeleteAsync没有像post那样的json参数.有谁知道如何使用c#中的System.Net.Http客户端来做到这一点?

// Delete a product's headers
public void DeleteProductHeaders(int id, string query)
{
    using (var client = GetClient())
    {
        HttpResponseMessage response;
        try
        {
            // HTTP DELETE
            response = client.DeleteAsync($"api/products/{id}/headers").Result;
        }
        catch (Exception ex)
        {
            throw new Exception("Unable to connect to the server", ex);
        }
    }
    return retVal;
}
Run Code Online (Sandbox Code Playgroud)

c# http asp.net-web-api system.net.httpwebrequest

7
推荐指数
2
解决办法
1万
查看次数

何时使用API​​控制器与MVC控制器

我知道WEB API和MVC之间的区别.我也知道在asp.net core 1.0中只有一种类型的控制器可以同时处理MVC和API.

但是,我最近一直在观看很多ASP.NET MVC教程,并注意到教师在Controllers文件夹中创建了一个Api文件夹.

这样他就分出了主要处理ViewModel的所有MVC控制器,并使用View函数告诉MVC哪个视图要从主要处理Dtos的API控制器中显示,并且似乎严格处理数据,而不是视图.

您会认为在MVC应用程序中不会有API控制器吗?特别是因为在核心1.0中你继承了一个类:'Controller'.但是我想当你整合像Angular和Kendo UI这样的前端框架来制作很多ajax请求时,你通常希望通过api来完成它们.

这是我目前的理解:
严格使用MVC控制器仅用于MVC,例如指定应显示哪个视图以及传递视图模型.

使用API​​控制器主要用于ajax调用,从不用于视图初始加载,从不用于MVC CRUD模式.

在谈到这一点时,有人能给我一个更好的标准吗?

c# asp.net asp.net-mvc asp.net-web-api asp.net-core

7
推荐指数
1
解决办法
1万
查看次数

使用Dapper查询复杂对象

我有一个具有以下属性的Customer类:

public int Id { get; set; }
public string Name { get; set; }
public int AddressId { get; set; }
public Address Address { get; set; }
Run Code Online (Sandbox Code Playgroud)

我的目标是编写一个Dapper查询,该查询将使用内部联接在返回的每个Customer中填充整个Address属性。

这是我所拥有的并且正在运行,但是我想知道这是否是最干净/最简单的方法:

StringBuilder sql = new StringBuilder();
using (var conn = GetOpenConnection())
{
    sql.AppendLine("SELECT c.Id, c.Name, c.AddressId, a.Address1, a.Address2, a.City, a.State, a.ZipCode ");
    sql.AppendLine("FROM Customer c ");
    sql.AppendLine("INNER JOIN Address a ON c.AddressId = a.Id ");

    return conn.Query<Customer, Address, Customer>(
        sql.ToString(),
        (customer, address) => {
            customer.Address= address;
            return userRole;
        },
        splitOn: …
Run Code Online (Sandbox Code Playgroud)

c# orm dapper micro-orm dapper-extensions

7
推荐指数
2
解决办法
5317
查看次数