小编sch*_*nyw的帖子

在 VSTS (Azure DevOps) 中禁用同一管道的同时构建

我在 VSTS(也称为 Azure DevOps,现在已知)上有一个构建管道,它在一个代理池上运行,该代理池有 2 个构建代理(代理 A 和 B),并设置了持续集成。我想在不同的代理上禁用此构建管道的同时执行,即如果在代理 A 上运行构建,我不希望构建在代理 A 上的构建完成之前开始在代理 B 上运行。

我可以通过更改要求来取消所有构建代理运行构建的资格(例如,只有代理 A 满足需求)来实现这一点。但是,这是不可取的,因为构建代理与其他项目共享,有时所选代理会很忙,所以我不想将构建代理限制在任何特定机器上。

在 VSTS 中是否有一种简单的方法可以做到这一点?

azure-devops azure-pipelines

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

仅接受ASP.Net Core 2.1 MVC中的本地请求

我有一个简单的ASP.Net Core 2.1 MVC应用程序,并且在其中一个控制器中,我想实现一个仅接受本地请求的操作(即,请求源自127.0.0.1,或者来自与服务器IP相同的地址) 。

我一直在ASP.Net Core中寻找适合此目的的筛选器,但似乎找不到。我可以使用AuthorizeAttribute,例如[Authorize(Policy = "LocalOnly")]

并在启动中的ConfigureServices中注册相应的策略:

services.AddAuthorization(options =>
{
    options.AddPolicy("LocalOnly", policy =>
    {
        policy.RequireAssertion(context =>
        {
            if (context.Resource is AuthorizationFilterContext mvcContext)
            {
                return mvcContext.HttpContext.Request.IsLocal();
            }
            return false;
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

IsLocal()的扩展方法在哪里HttpRequest

但是我认为这不是正确的方法-我试图做的实际上不是授权,并且由于我的程序中没有身份验证,因此产生的错误也不正确。

是否有一种简单合法的方法来做我想要的过滤器?还是这实际上应该在控制器的动作逻辑中完成?还是整个检查本地请求的想法不是很正确?

非常感谢您的帮助。

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

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

在 ASP.NET Core 中间件构造函数中混合依赖注入和手动传递的参数

我正在为 ASP.NET Core 2.2 编写自定义中间件。根据编写自定义中间件的Microsoft Docs

中间件组件可以通过构造函数参数从依赖注入(DI)中解析它们的依赖关系。UseMiddleware<T>也可以直接接受附加参数。

这看起来都不错,但它并没有说明当我混合这两种方式时会发生什么,例如使用 DI 并在UseMiddleware<T>. 例如,我有以下中间件:

public class CustomMiddleware
{
    public CustomMiddleware(RequestDelegate next, ILogger<CustomMiddleware> logger, CustomMiddlewareOptions options)
    { 
        ...
    }

    public async Task InvokeAsync(HttpContext context)
    {
        ...
    }
Run Code Online (Sandbox Code Playgroud)

wherelogger由 DI 提供,options其提供方式如下:

app.UseMiddleware<CustomMiddleware>(new CustomMiddlewareOptions());
Run Code Online (Sandbox Code Playgroud)

我自己对 2.2 的测试似乎表明这可以正常工作,并且构造函数中参数的顺序无关紧要(我可以将 DI 参数放在手动传递的参数之前或之后,甚至在两个手动传递的参数之间) . 但我正在寻找一些保证,即我所做的一切都没有问题。如果有人能指出一些支持这种用法的文档或源代码,那就太好了。谢谢!

c# dependency-injection asp.net-core asp.net-core-middleware asp.net-core-2.2

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

创建一个覆盖字节数组一部分的 MemoryStream 而不复制内存中的数据

我正在编写一些库代码,其中有一个byte[]在内存中保存一些数据。我想将byte[]viaStream对象的某些部分公开给库使用者。例如,我希望暴露的Stream能够访问从位置 50 到byte[]. 公开的Stream将是可读和可查找的,但不可写。

有没有一种简单的方法可以做到这一点(希望不需要编写我自己的Stream实现)而无需在内存中创建数据副本?我试图使用新Memory<T>的API,但由于没有得到很远MemoryStream的构造函数不能带一个Memory<T>参数,它似乎是我不能让一个byte[]Memory<byte>没有做一个副本:

byte[] byteArray = new byte[100];
Memory<byte> memory = byteArray;

// Let's say I want to expose the second half of the byte[] via a Stream
var slicedMemory = memory.Slice(50);

// The only way to construct a MemoryStream from Memory<byte> is to call ToArray and get a byte[]
// But this makes …
Run Code Online (Sandbox Code Playgroud)

.net c# memorystream .net-core

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