小编Ily*_*dik的帖子

使用moq验证对具有param参数的函数的调用

我有一个带LogTrace的ILogger接口(字符串值,params object []参数).现在我想验证是否调用了LogTrace并且要记录的字符串包含一些id.问题是它可以被不同地调用.例如1)LogTrace("MyString"+ id)2)LogTrace("MyString {0}",id)等等.

有没有一种方法可以让Moq验证所有场景?我只能想到创建一个手工制作的模拟器,它将格式化可用于验证的字符串.

c# moq function

13
推荐指数
1
解决办法
6635
查看次数

link rel ="preload"的工作原理是什么?

Chrome的新版本增加了支持<link rel="preload">.他们发布了大量有关原始文档参考的信息.有人可以提供关于它如何工作的简单解释,与没有的情况相比有什么不同rel="preload".

css browser html5 preloading

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

如何排除在ASP.NET Core中发布的文件?

我注意到,当我发布新的ASP.NET项目时,它会将所有非代码文件放在包中的根文件夹中.例如,这些文件最终到达:

  • 发布个人资料
  • gulpfile.js

没有必要在已发布的文件夹中包含这些内容.在旧的解决方案中,它就像修改文件的属性以排除它们一样简单.现在属性完全不同,并打开一个非常无用的对话框,您只能看到文件的路径.也许有可能采取其他方式吗?理想情况下,IDE应该足够聪明,不要发布这些常见文件,但对于某些自定义,它应该是一种排除它们的方法.

当然,一些额外的文件发布的问题当然不是很大,但排除它们也是有意义的.

PS可能的建议重复是不一样的,因为它只处理旧的项目/解决方案结构,而ASP.NET Core引入了一个新的,其他解决方案不适用.

dnx dnu asp.net-core

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

如何在ASP.NET Core(asp.net 5)中使用持票人令牌默认保护所有控制器?

我在我的应用程序中添加了一个JWT中间件:

app.UseJwtBearerAuthentication(options => { options.AutomaticAuthenticate = true;} )
Run Code Online (Sandbox Code Playgroud)

没有趣的是,它会为所有操作抛出500异常(在以后的版本中应该更改为401),即使那些根本没有受到保护的(没有authorize属性).在我看来,这是错误的,但也许我自己做错了什么.

理想的情况是什么,我想实现的是,所有操作都在默认情况下保护(有针对以往ASP.NET过滤器),并且我会把匿名在那些我想公众或者是授权("SomePolicy")如果我想更多的策略,但我希望在没有令牌的情况下无法访问API.我如何在新的ASP.NET中执行此操作(我知道我可以从具有此属性的某个控制器继承,但我希望有更好的方法)?

authentication jwt asp.net-identity asp.net-core

10
推荐指数
2
解决办法
5382
查看次数

无法使用Microsoft.Azure.ServiceBus连接到Azure ServiceBus

我创建了一个非常简单的控制台应用程序,它连接到Azure ServiceBus并发送一条消息.我尝试了Microsoft(Microsoft.Azure.ServiceBus)的最新库,但不管我做什么,我只是得到这个错误:

无法建立连接,因为目标计算机主动拒绝它ErrorCode:ConnectionRefused

我在Service Bus Explorer中尝试了完全相同的连接字符串,它确实工作正常.此外,我使用Microsoft(WindowsAzure.ServiceBus)的旧库连接没有问题.

var sender = new MessageSender("endpoint", "topicName");
sender.SendAsync(new Message(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject("test"))));
Run Code Online (Sandbox Code Playgroud)

我尝试使用.NET Framework 4.6.2和Core,同样的例外.我怀疑这些库使用的默认协议可能存在一些差异,但我无法确定这一点.

PS尝试过Microsoft docs中的示例,但结果仍然是同样的例外

.net c# azure azureservicebus

10
推荐指数
2
解决办法
3308
查看次数

组合根是否需要单元测试?

我试图找到答案,但似乎没有直接讨论过很多.我有一个我的应用程序的组合根,我创建一个DI容器并在那里注册所有内容,然后解决所有依赖项所需的顶级类.由于这一切都在内部发生 - 因此很难对组合根进行单元测试.你可以做虚拟方法,受保护的字段等等,但我不是为了能够进行单元测试而引入这些东西的忠实粉丝.其他类没有大问题,因为它们都使用构造函数注入.所以问题是 - 根本测试组合根是否有意义?它确实有一些额外的逻辑,但并不多,在大多数情况下,在应用程序启动期间会弹出任何故障.我有一些代码:

public void Initialize(/*Some configuration parameters here*/)
    {
        m_Container = new UnityContainer();

        /*Regestering dependencies*/

        m_Distributor = m_Container.Resolve<ISimpleFeedMessageDistributor>();
    }

    public void Start()
    {
        if (m_Distributor == null)
        {
            throw new ApplicationException("Initialize should be called before start");
        }

        m_Distributor.Start();
    }

    public void Close()
    {
        if (m_Distributor != null)
        {
            m_Distributor.Close();
        }
    }
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection compositionroot

9
推荐指数
1
解决办法
958
查看次数

如何在ASP.NET Core中以不同方式处理错误(或区分)API调用和MVC(视图)调用

在我基于普通MVC和WebApi的应用程序中,我有两种不同的错误处理路径.

如果在WebApi调用期间发生错误,我会拦截它(使用标准的web api选项)并返回带有相应HTTP状态代码的json消息,以便客户端应用程序可以处理它.

如果错误发生在MVC中,那么我会使用一些标准处理程序,可能会根据状态代码将用户重定向到某个默认错误屏幕.

现在在ASP.NET Core中,两者都加入了相同的框架,所以如果我只是拦截并返回JSON,那么我冒险向用户显示json,因为它可以是一个返回视图的动作.另一方面,如果我使用app.UseExceptionHandler那么我的API调用将从错误页面获取HTML,这在js中是不可用的.

为这两种情况提供单独的错误处理的好方法是什么?或者也许有更好的方法来处理它?

PS我宁愿重用开箱即用的MVC异常处理程序,只添加web api部分.

error-handling asp.net-web-api asp.net-core-mvc asp.net-core

9
推荐指数
1
解决办法
2195
查看次数

无法在Web服务器上启动调试.远程服务器返回错误:(404)Not Found.在Visual Studio中启动调试时出错

我已经将项目设置为在IIS上运行了一段时间,当我按F5时它确实连接没有问题.但最近这停止了工作,当我按F5 /按下时我确实收到了这个错误Debug->Start debugging:

无法在Web服务器上启动调试.远程服务器返回错误:(404)Not Found.

在此输入图像描述

这是我的设置:

在此输入图像描述

我不确定发生了什么,可能是一些VS更新或Windows更新,但我试图谷歌无处不在,没有任何工作.如前所述,附加到流程工作正常,但这种更简单的方法停止了这一操作.

更新:

尝试过Process Monitor来找出出错的地方,看起来w3wp尝试访问路径MyProjectFolder\debugattach.aspx,结果是"NAME NOT FOUND".不知道这是否是问题的根源.

.net asp.net iis debugging visual-studio-2017

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

如何在 Azure Function 中使用 Azure 托管标识通过触发器访问服务总线?

我在 Azure 中创建了一个 ServiceBus 命名空间,以及一个主题和一个订阅。我还有一个简单的 Azure 版本 1 函数,它触发 ServiceBus 中接收到的主题,如下所示:

[FunctionName("MyServiceBusTriggerFunction")]
public static void Run([ServiceBusTrigger("myTopic", "mySubscription", Connection = "MyConnection")]string mySbMsg, TraceWriter log)
{
    log.Info($"C# ServiceBus topic trigger function processed message: {mySbMsg}");
}
Run Code Online (Sandbox Code Playgroud)

当我使用主题的共享访问策略在函数应用程序设置中定义连接字符串时,该函数可以很好地触发 ServiceBus 中的主题,如下所示:

Endpoint=sb://MyNamespace.servicebus.windows.net/;SharedAccessKeyName=mypolicy;SharedAccessKey=UZ...E0=
Run Code Online (Sandbox Code Playgroud)

现在,我想使用托管服务标识 (MSI) 来访问 ServiceBus,而不是共享访问密钥。根据这个(https://docs.microsoft.com/en-us/azure/active-directory/managed-service-identity/services-support-msi)应该是可能的,除非我误解了一些东西。我还没有设法让它工作。

我试过的是

  • 在 Azure 门户中为我的函数设置托管服务标识“开启”
  • 为 Azure 门户中 ServiceBus 访问控制部分中的函数赋予所有者角色
  • 像这样设置 MyFunction 的连接字符串:Endpoint=sb://MyNamespace.servicebus.windows.net/

该功能未在此设置中触发,所以我错过了什么或我做错了什么?如果您有任何建议可以帮助我走得更远,我将不胜感激。谢谢。

triggers azureservicebus azure-functions azure-managed-identity

9
推荐指数
2
解决办法
2021
查看次数

构造函数是在 C# 中的类中初始化不可为空属性的唯一方法吗?

我已切换到在使用 C#8 的项目中启用可空。现在我有以下课程:

public class Request
{
    public string Type { get; set; }
    public string Username { get; set; }
    public string Key { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

编译器当然抱怨它不能保证这些属性不会为空。除了添加接受不可为空字符串的构造函数之外,我看不到任何其他方法来确保这一点。

这对于一个小班级来说似乎很好,但是如果我有 20 个属性,这是在构造函数中列出所有属性的唯一方法吗?是否有可能以某种方式使用初始化程序强制执行它:

var request = new Request { Type = "Not null", Username = "Not null" }; // Get an error here that Key is null
Run Code Online (Sandbox Code Playgroud)

PS 有一个很好的答案,建议使用 iniatlizer 来处理属性,但这并不总是适用于例如Type不能只是初始化为某个随机值的类型

c# non-nullable nullable-reference-types

9
推荐指数
2
解决办法
3173
查看次数