小编Wal*_*mar的帖子

我如何告诉Moq返回任务?

我有一个声明的界面

Task DoSomethingAsync();
Run Code Online (Sandbox Code Playgroud)

我正在使用MoqFramework进行测试:

[TestMethod()]
public async Task MyAsyncTest()
{
   Mock<ISomeInterface> mock = new Mock<ISomeInterface>();
   mock.Setup(arg => arg.DoSomethingAsync()).Callback(() => { <my code here> });
   ...
}
Run Code Online (Sandbox Code Playgroud)

然后在我的测试中我执行调用的代码await DoSomethingAsync().而且测试在这条线上失败了.我究竟做错了什么?

c# unit-testing moq task-parallel-library

291
推荐指数
3
解决办法
11万
查看次数

从Web API网址中删除"api"前缀

我有一个API控制器

public class MyController : ApiController { ... }
Run Code Online (Sandbox Code Playgroud)

默认情况下它映射到URL mysite/api/My/Method,我希望它没有"api"前缀的URL:mysite/My/Method

设置控制器属性[RoutePrefix("")]对我没有帮助.

还有其他方法可以实现吗?

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

10
推荐指数
1
解决办法
5434
查看次数

请求前清除以前的数据

我有一个HTML模板,它从控制器的数组中加载数据并将它们保存在表中.我还有一个指令,它可以对表行进行转换.数据数组正在填写API请求.在新请求之后,我已将请求结果合并到我的表中.正在为每个请求添加一组行,而不是清除以前的结果.

我已经调试了我的控制器代码来检查我的数组的状态,并在每次请求之前清除它.这是肯定的.然而,之前添加了新的结果.我认为原因可能出在我的移植指令模板中.

模板看起来像:

<div class="row">
    <div class="col-md-12">
        <div id="results" ng-show="results.length > 0">
            <table class="table result-table">
                <thead>
                    <tr>
                        <th>1</th>
                        <th>2</th>
                        <th>3</th>
                        <th>4</th>
                    </tr>
                </thead>
                <tbody>
                    <tr ng-repeat="result in results" my-result></tr>
                </tbody>
            </table>
        </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

这是我的transclusion指令的代码:

angular.module('app').directive('myResult',
['$compile',
function ($compile) {
    return {
        transclude: true,
        templateUrl: '/Scripts/app/templates/resultTemplate.html',
        compile: function (tElement, tAttr, transclude) {
            var contents = tElement.contents().remove();
            var compiledContents;
            return function (scope, iElement, iAttr) {
                if (!compiledContents) {
                    compiledContents = $compile(contents, transclude);
                }
                compiledContents(scope, function (clone, scope) {
                    iElement.replaceWith(clone);
                });
            }; …
Run Code Online (Sandbox Code Playgroud)

javascript ajax asp.net-ajax duplicates angularjs

5
推荐指数
1
解决办法
236
查看次数

XML序列化期间将忽略属性XmlNamespaceDeclarations

我尝试使用自定义命名空间序列化对象.这就是这个类的样子:

[XmlRoot("Root", Namespace = "myNamespace")]
public partial class MyClass
{
    public MyClass()
    {
        this.Xmlns = new XmlSerializerNamespaces();
        this.Xmlns.Add(string.Empty, "myNamespace");
    }

    [XmlNamespaceDeclarations()]
    public XmlSerializerNamespaces Xmlns = null;
}
Run Code Online (Sandbox Code Playgroud)

以下是序列化它的代码:

XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
serializer.Serialize(xmlWriter, obj);
Run Code Online (Sandbox Code Playgroud)

预期的结果是

<Root xmlns="myNamespace" />
Run Code Online (Sandbox Code Playgroud)

但是它仍然有xmlns:xsi和xmlns:xsd属性:

<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="myNamespace" />
Run Code Online (Sandbox Code Playgroud)

当我序列化使用时serializer.Serialize(xmlWriter, obj, obj.Xmlns),结果是正确的.

为什么序列化程序会忽略该XmlNamespaceDeclarations属性?它不应该自动从它获取命名空间声明吗?如何在序列化类中定义名称空间?

提前致谢!

c# xml serialization xml-namespaces

3
推荐指数
1
解决办法
2519
查看次数

“展平”层次结构表的快速方法?

我有一个非常大的表,其层次结构无法修改。表中的节点有IdParentId、 aLevel和一些数据。这Level意味着具有 level 的节点N不仅可以是 level 的子节点,N-1还可以是 level 等的子节点。好消息是级别的数量是有限的 - 只有 8 个。级别 1 位于层次结构的顶部,级别 8 位于层次结构的末尾。N-2N-3

现在我需要根据关卡的位置压平该桌子。结果应该是这样的:

Lvl1   Lvl2   Lvl3   ...   Lvl8
xxx    xxx    null         xxx
xxx    null   xxx          xxx
xxx    null   null         xxx
xxx    xxx    xxx          xxx
Run Code Online (Sandbox Code Playgroud)

第一步 由于关卡数量有限,第一个想法就是把LEFT JOIN所有的桌子都上几遍ParentId = Id。但这使得级别改变了位置,因为级别 6 可以被跳过,级别 5 取代了它的位置。

第二步所以我习惯CASE WHEN根据行的级别选择值。

-- LEVEL 4
CASE
    WHEN lvl6.[Level] = 4 THEN lvl6.Data …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server hierarchy bigdata sql-server-2012

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

在 GitHub 工作流中应用 EF 迁移

我有一个带有 EF Core 3.0 的 Asp Net Core 项目的 GitHub 存储库。我添加了以下工作流程以在每次更新develop分支时运行

name: Develop Build
on:
  push:
    branches:
      - develop
  pull_request:
    branches:
      - develop
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
    - name: Setup .NET Core
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 3.0.102-servicing-014397
    - name: Build with dotnet
      run: dotnet build --configuration Release
    - name: Test with dotnet
      run: dotnet test --configuration Release
    - name: Update database
      run: dotnet ef database update --c DataContext --p MyProj --s MyProjFactory
Run Code Online (Sandbox Code Playgroud)

最后一行返回错误:

Could …
Run Code Online (Sandbox Code Playgroud)

asp.net-core github-actions ef-core-3.0

3
推荐指数
1
解决办法
1167
查看次数

MajorUpgrade没有更改wix中的ProductID

我想在WIX中制作一个安装包,它将升级我产品的早期版本.我为此目的使用MajorUpgrade.

问题是 - 我想在我的应用程序的整个生命周期内保留ProductId而不做任何更改.但是MajorUpgrade对每个版本都需要不同的ProductId.否则,它会显示错误消息"已安装另一个版本".

如何进行升级,保留ProductId?

提前谢谢!

wix upgrade

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