小编Bar*_*cer的帖子

InMemoryDatabase 有连接字符串吗?

因此,我们在使用 MediatR 的应用程序中使用 CQRS 模式。我正在开发一个基本的 CRUD API,具有以下规定:

  • GET 调用需要使用 QueryHandlers、Dapper、SQL 从数据库检索数据。
  • PUT/POST/DELETE 调用需要使用 CommandHandlers/Entity Framework 来修改数据库。

此时我已使其按预期工作。然而,我发现测试是一场噩梦,因为我无法找出访问内存数据库所需的连接字符串。

我尝试过connectionString = "Data Source=:memory:;Mode=Memory;Cache=Shared";这些价值观的各种排列,但没有一个有效。

我看过 SQLite,但它不喜欢我尝试在启动时注册两个不同的数据库(SQLite 用于读取,Microsoft.EntityFrameworkCore.InMemory 用于写入),我试图获取的对象也有主键和bigint/longSQLite似乎只能处理integer/int类型主键,因为它会抛出“只有整数类型的主键可以具有自动增量”。

我正在使用类似于以下的代码设置 XUnit 测试:

public class CustomWebApplicationFactory<TStartup> : WebApplicationFactory<TStartup> where TStartup : class
{
   protected override void ConfigureWebHost(IWebHostBuilder builder)
   {
        builder.ConfigureServices(svcs => 
        {
           services.AddDbContextPool<MyDbContext>(opts =>
           {
              options.UseInMemoryDatabase("MyTestDB");
           });
         
           using var scope = svcs.BuildServiceProvider().CreateScope();
           var scopedSvcs = scope.ServiceProvider;
           var dbSvc = scopedSvcs.GetRequiredService<MyDbContext>();

           dbSvc.Database.EnsureCreated();


           // Do DB Seeding stuff
        });
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# testing xunit entity-framework-core

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

SignalR 2.2.0 WebSocket 连接到集线器时出错

我有一个 ASP.Net MVC 应用程序,我已将 SignalR 添加到其中。在遵循“入门”教程(当然进行了修改,因为它出现在我的应用程序中)之后,我让它在本地主机上运行。但是一旦进入生产环境,就会出现以下错误:

与“ws://xxxxx/signalr/connect?transport=webSockets&clientProtocol=1.5&connectionToken=xxxxx”的 WebSocket 连接失败:连接在收到握手响应之前关闭。

我可以访问/signalr/hubs(我得到一个js文件)。关于为什么会发生这种情况有什么想法吗?

c# asp.net-mvc-4 signalr signalr-hub

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

使用[授权]集成测试Web Api

所以我发现在[Authorize]标签上有些东西让我有所启发,但没有什么可以解决我的问题.

我的场景是我有Web Api方法,我希望使用RestSharp进行集成测试.但是RestSharp正在获取我的登录页面,而不是调用的结果.

[Authorize]
public Item GetItem([FromBody] int id) 
{
   return service.GetItem(id);
}
Run Code Online (Sandbox Code Playgroud)

该产品使用自定义登录系统,我真正想要的是一种只为集成测试禁用[授权]徽章的方法.但是我读到你可以允许匿名用户,它会"禁用"徽章,所以在解决方案中,我有一个集成测试项目,在那个项目中我有一个App.config文件.在那个文件中,我把:

 <location>
  <system.web>
   <authorization>
     <allow users="?"/>
    </authorization>
  </system.web>
 </location>
Run Code Online (Sandbox Code Playgroud)

但这似乎也不起作用.任何有关正在发生的事情的解释,为什么它不起作用以及如何才能使这项工作将不胜感激.

我试图设置一个Thread.CurrentPrincipal,但是没有用(也许我做错了 - 你能在代码中设置"任何东西"吗?).如果有帮助,则在httpmodule中处理身份验证.

c# integration-testing web-config authorize-attribute asp.net-web-api

5
推荐指数
2
解决办法
3767
查看次数

在Highcharts中使用对象数组来处理系列数据

我有一个对象数组,我想在高级图表中显示.每个对象都有一个名称和一个值.

我试图通过这样做来实现这一点

var objects = objectArray[]; // objectArray being an array of the objects I want data on
var objectNames = nameArray[]; // This being an array of all the names of the objects
var objectValues = valueArray[]; // An array of all the values of the objects


 series: [{
    data: objects.value,
    name: objects.name
 }]
Run Code Online (Sandbox Code Playgroud)

这让我感到震惊.所以我尝试构建这样的系列:

 series: [{
    data: objectValues,
    name: objectNames
 }]
Run Code Online (Sandbox Code Playgroud)

这给了我数值的数据,但名称是objectNames数组中的所有名称...对于每一个数据.所以我尝试使用

series: [{
    data: objectValues
},
{   
    data: objectNames
}]
Run Code Online (Sandbox Code Playgroud)

这导致看到了objectValues的图表,并在图例中看到了名称的另一个选项 - 这是完全不可接受的,因为有一系列标签没有意​​义,对吧?

所以我决定以编程方式构建一个系列,使用foreach循环然后将其传递给构造函数.但是,http : //www.highcharts.com/docs/getting-started/how-to-set-options/ …

highcharts

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

Select2以编程方式设置搜索条件并打开下拉列表并显示相关结果(无ajax调用)

我正在努力从select2中删除ajax调用.我有一个填充下拉列表的静态对象列表.我正在看的工作流程是......

  1. 用户单击select2
  2. 用户键入搜索框(显示结果)
  3. 用户进行选择并加载新网页.

此时,我希望使用用户最初搜索的内容预填充搜索词,以便用户只需单击该框并预先填充他们选择的结果列表即可进入此页面.但是我不想篡改静态列表中的可用选项.

IE

  1. 用户输入"ABC",他们有一个"ABC公司""ABC人"和"ABC实体"列表可供选择.

  2. 用户选择"ABC Person",这样他们就会被带到ABC Person页面.

  3. 用户发现这不是他们要寻找的页面.

  4. 用户再次单击搜索框,并且select2框在搜索项区域中显示"ABC",并自动显示"ABC公司""ABC人员"和"ABC实体"列表(就好像他们只搜索"ABC") .

用户可以退格并输入"XYZ",并且在不进行任何ajax调用的情况下显示"XYZ公司""XYZ人员""XYZ实体"的新列表.

目前我可以以编程方式设置搜索项值,但我无法弄清楚如何在.select2输入框上触发更改事件以获得打开和加载的结果.

javascript jquery jquery-select2

4
推荐指数
1
解决办法
7415
查看次数

IIS HTTP到HTTPS web.config重写不会返回整个URL

所以我一直在尝试使用以下内容重写:

<rules>
  <rule name="HttpToHttps" stopProcessing="true"/>
    <match url="(.*)"/>
    <conditions>
      <add input="{HTTPS}" pattern="off" ignoreCase="true"/>
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}{URL}"/>
  </rule>
<rules>
Run Code Online (Sandbox Code Playgroud)

在两个环境中,这会重定向.在第三种环境中,它不起作用.它不起作用,看着一个小提琴日志,我看到完整网址的http调用.当它重定向到https时,它会删除HTTP_HOST之后的所有内容.

所以使用以下网址:

不安全://www.mysite.com/page.aspx VAR1 = 1&VAR2 = 2

在两个环境中,它变成了

安全://www.mysite.com/page.aspx VAR1 = 1&VAR2 = 2

在第三个它成为:

安全://www.mysite.com

我尝试将其重写为https:// {HTTP_HOST} {HTTP_URL},并在前两个环境中将{URL}加倍:

安全://www.mysite.com/page.aspx VAR1 = 1&VAR2 = 2&VAR1 = 1&VAR2 = 2

我对web.configs不是很有经验,有点学习,所以如果有人对这里发生的事情有任何意见,我将不胜感激.如果它与任何东西有任何关系,则第三个环境位于两个负载均衡的服务器上.

iis web-config url-rewriting

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

尝试通过实体框架更新数据库对象时,对象已存在错误

我正在使用以下方法尝试使用实体框架更新对象:

public static void UpdateItem(Item updatedObject) {

  using (var context = new DbContext())
  {
    context.MyObjectsPropertys.Attach(updatedObject);
    context.Entry(updatedObject).State = EntityState.Modified;
    context.SaveChanges();
  }
}
Run Code Online (Sandbox Code Playgroud)

我在附件上收到错误消息:

 An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
Run Code Online (Sandbox Code Playgroud)

如果我尝试将Attach调用更改为Add调用(具有相同键的对象已经存在objectstatemanager),则会得到:

Cannot insert duplicate key in object 'database.Table'. The duplicate key value is (AttributeValue). The statement has been terminated.
Run Code Online (Sandbox Code Playgroud)

我发现了很多与此错误有关的问题,但是在我的情况下,没有任何答案可以正常工作:

我也尝试删除“ Attach”语句,并按照Error的建议使用相同的键DbContext进行多个对象的状态更改,但这也不起作用。

对我而言,最令人沮丧的是,这与成功更新解决方案中其他内容的语句序列完全相同。

c# entity-framework asp.net-mvc-4

0
推荐指数
1
解决办法
1820
查看次数