小编Gre*_*mps的帖子

AuthorizeRouteView 不适用于注销用户

我们正开始将项目迁移到 blazor,但在将内容限制为仅登录用户时遇到了一些问题。

对于此测试,我们使用了标准 Visual Studio 2019 Blazor 服务器端项目模板,并启用了本地用户和帐户身份验证。

然后,我们将 App.razor 文件更改为以下内容:

<Router AppAssembly="@typeof(Program).Assembly">
<Found Context="routeData">
    <AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)">
        <NotAuthorized>
            NOT AUTHORIZED!!!!!
        </NotAuthorized>
        <Authorizing>
            AUTHORIZING!!!!!
        </Authorizing>
        </AuthorizeRouteView>
</Found>
<NotFound>
    <CascadingAuthenticationState>
        <LayoutView Layout="@typeof(MainLayout)">
            <p>Sorry, there's nothing at this address.</p>
        </LayoutView>
    </CascadingAuthenticationState>
</NotFound>
Run Code Online (Sandbox Code Playgroud)

中的代码<NotAuthorized>永远不会被击中,我已经确认浏览器上没有cookie,甚至也在私人浏览器窗口中尝试过。

我在另一个组件中注入了 HTTPContext 来查看当前用户发生了什么。当前用户不为空,它具有身份,但显示未经身份验证,并且没有预期的声明。

我在这里缺少什么吗?

asp.net-core blazor blazor-server-side blazor-client-side

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

Couchbase 无可用索引

我们在使用 couchbase N1QL 查询时遇到问题。

我们有一个索引定义如下:

CREATE INDEX `AppUser_SubjectId3` ON `Portal`(`SubjectId`) WHERE ((meta(self).`id`) like `AppUser%`)
Run Code Online (Sandbox Code Playgroud)

然后我们尝试运行以下查询:

SELECT RAW `Extent1` 
FROM `Portal` as `Extent1` 
USE INDEX (`AppUser_SubjectId3` USING GSI) 
WHERE (`Extent1`.`SubjectId` = 'c8ea08231c3a985a06342355b87d6e2d6290a985d5c3592e5b8e5e5f14608a08')
Run Code Online (Sandbox Code Playgroud)

并得到以下错误:

键空间门户上没有与您的查询匹配的索引。
使用 CREATE INDEX 或 CREATE PRIMARY INDEX 创建索引,
或检查您的预期索引是否在线。

我们已经确认了明显的索引在线。唯一值得注意的是 Bucket 目前实际上并不包含任何文档,但我们不希望在这种情况下出现此错误,只是没有返回任何内容。

有任何想法吗?

编辑:

我创建了另一个没有 WHERE 子句的索引,它不再返回错误。

CREATE INDEX `AppUser_SubjectId4` ON `Portal`(`SubjectId`)
Run Code Online (Sandbox Code Playgroud)

唯一的问题是需要 WHERE 子句!

couchbase sql++

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

C#在不同的程序集中定义覆盖方法

我有一个我构建的类库,它包含许多从单个基类继承的类.

在基类上定义了一个名为Process的虚方法,它基本上将类结构的内容处理到应用程序中.

应用程序的不同组件(服务器)之间存在消息传递,它们传递和接收基类类型的消息,然后调用Process()

我遇到的问题是,我需要能够覆盖应用程序其他部分的Process()方法,即在不同的程序集中,而不从中导出另一种类型.

从我所看到的这似乎是不可能的,所以看看是否使用接口将解决问题?

编辑:

我在问题中没有提到的是基类的每个派生类需要具有不同的Process()实现,具体取决于该类所需的功能.

例如:

class First : BaseClass
{
  override void Process()
  {
    //do something
  }
}

class Second : BaseClass
{
  override void Process()
  {
    //do something else
  }
}
Run Code Online (Sandbox Code Playgroud)

覆盖过程方法中的代码需要位于不同的程序集中,因为此代码将基于其所属的类引用其他外部源,而不希望在整个应用程序中传播.

只是为了澄清我有访问权限,如果需要可以更改库类.

我一直在做进一步的阅读,看起来使用代表可以解决这个问题..想法?

.net c#

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

JSON.NET 科学记数法中的整数

我们从另一个系统获得了一些 JSON,该系统认为以科学记数法表示整数会很有趣。按照目前的情况,JSON.NET 会抛出以下异常:

输入字符串 9.658055e+06 不是有效整数。

我已经能够使用一些简单的代码重新创建该问题:

public class TestClass
{
    public int Value { get; set; }
}

static void Main(string[] args)
{
    var json = "{Value:9.658055e+06}";

    var xx = JsonConvert.DeserializeObject<TestClass>(json);
}
Run Code Online (Sandbox Code Playgroud)

我有什么想法可以让库正确反序列化它吗?

更新:感谢所有答案,由于其他原因,将类型更改为 Int64 或 double 是不可能的,但转换器类已经完成了这项工作

.net c# json.net

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

Rabbit MQ 过滤

我们有一个 RabbitMQ 交换器,它在我们系统的几个组件之间交换消息。

每个组件都是交易所的发布者和订阅者。

我们需要找到一种方法来确保每个应用程序都不会收到它发送到交换中的消息。

例如。

应用 1 发送刷新消息。我们希望这适用于除 App 1 之外的所有交易所订阅者

我可以看到您可以指定路由属性,但这似乎定义了您想要的消息而不是您不想要的消息。

有任何想法吗?

rabbitmq

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

从管道构建Powershell字符串参数

我需要使用管道输出动态构建一个字符串参数,然后传递给另一个命令.

source命令Get-VM有一个名为Name的元素

目标命令是Move-VM,接受参数-DestinationStoragePath

我需要动态操纵基于源名称是这条道路D:\{0},其中{0}的虚拟机名称.

到目前为止我有这个:

Get-VM | Move-VM -DestinationStoragePath [string]::Format("D:\{0}",$_.Name)
Run Code Online (Sandbox Code Playgroud)

但它抛出异常,如果我静态设置DestinationStoragePath参数,那么它工作正常,所以它只是这一点点绊倒它.

有任何想法吗?

powershell

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

覆盖IEnumerable .NET

我们正在努力调整一些第三方代码,将基类扩展为我们可以调整的派生类.除了一个返回IEnumerable的方法之外,一切都运行良好.

我们已经创建了一些sudo代码来测试问题的确切位置,并且可以使用一个简单的示例重新创建它.

在示例中,方法中的代码块下面永远不会被调用; 我们已经在那里放置了断点,我们已经添加了一个可以立即抛出的异常.结果始终相同,调试器只是跳过该行.

有人能解释我们做错了什么吗?第三方代码是否可能无法正常工作?

public class Test
{
    public virtual IEnumerable GetList(Type type, string key)
    {
        throw new NotImplementedException();
    }
}

public class Test2 : Test
{
    public override IEnumerable GetList(Type type, string key)
    {
        for (var x = 0; x <= 5; x++)
        {
            yield return x;
        }
    }
}

static void Main(string[] args)
{
        var x = new Test2();
        var y = x.GetList(typeof(decimal), "test") as List<int>;
}
Run Code Online (Sandbox Code Playgroud)

编辑:很多好的答案,简而言之,问题是yield关键字.由于这是第三方实现,我只能更改虚拟方法中的代码.最后,我最终从它返回一个IEnumerable,而不是从循环返回.

这使代码在第三方库中工作.

.net c#

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