小编Bal*_*nth的帖子

如何在 Fable Elmish SPA 中处理从后端重定向到身份验证提供程序

我有一个 AspNetCore 后端 api(在 F# 和 Giraffe 中),它使用 AzureAD 身份验证和 Microsoft.AspNetCore.Authentication.AzureAD.UI、有状态会话存储和 https only cookie。

前端是使用 Fable 编译为 js 的 Elmish SPA。

如果我只是在 url 栏中输入后端的受保护端点,一切正常,如果尚未登录,我将重定向到 login.microsoft 端点,使用 clientID 等,成功登录后,原始请求完成,我得到了受保护端点的响应。

但是,如果我尝试从 SPA 代码访问相同的端点,例如:使用 fetch 或使用 Fable.Remoting,如果未登录,后端仍会重定向,但重定向到 login.microsoft 的请求不再有效。使用 Fable.Remoting 有一个 CORS 标头,登录端点拒绝。如果我使用 nocors 发送 fetch,登录端点会收到 200 OK 响应,但没有响应正文(例如,登录页面没有 html 代码),而且似乎什么也没发生。

我只是不知道在 SPA 方面应该如何处理,并且无法真正找到任何相关信息。如果从 Fable.Remoting 启动与从浏览器 URL 栏启动,为什么后端会在重定向中包含 CORS 标头?没有响应正文的 fetch-ed 响应有什么问题?我可以只将 js 代码写入我的客户端,但甚至无法弄清楚在纯 js SPA 中如何处理。

还在生产中尝试了整个事情,从等式中删除 webpack devServer 代理,但一切都保持不变。

f# asp.net-core fable-f# elmish safe-stack

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

c#下面的构造函数中两个this关键字的区别是什么?

我不明白以下内容:在下面的代码中,Visual Studio告诉我,我可以通过删除this构造函数中的第二个关键字来简化我的代码.

但为什么我不能放弃第一个this关键字呢?这两个变量都是在构造函数之外的类中声明的,因此对于实例,两者都将被"覆盖"*.

如果我删除这两个this关键字,那么VS会抱怨第一个赋值是针对同一个变量,而不是针对第二个赋值.对我来说唯一明显的区别是第二个变量是一个数组,但我不明白它会如何使它有所不同?

*我怀疑覆盖不是这里正确的术语.

public class CelestialObject {

    CelestialBody[] celestialBodies;
    int celestialBodyCount;

    public CelestialObject(int celestialBodyCount = 2) {
        this.celestialBodyCount = celestialBodyCount;
        this.celestialBodies = new CelestialBody[celestialBodyCount];
    }
}
Run Code Online (Sandbox Code Playgroud)

c# constructor this

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

如果“直到”解析器以空格开头,为什么 manyCharsTill 组合器不起作用?

我尝试解析类似 xml 的标签(但不是正确的 xml 文档..):目标是返回没有开头或结尾空格的“法兰宽度”,但带有内部空格。

open FParsec

let testParser =
    pstring "<desc>" .>>. spaces
    >>. manyCharsTill anyChar (spaces .>>. pstring "</desc>")

run testParser "<desc> Flange width </desc>"
Run Code Online (Sandbox Code Playgroud)

如果我理解解析器组合器的预期结果:

保持吞咽字符的 anyChar 解析器单元“直到”解析器,它寻找空格,然后是结束标记成功。

实际发生的情况是,“直到”解析器在“宽度”之前的空间上失败(应该如此),但会使 manyTill 解析器短路,而不是让 anyChar 吞下该空间并继续前进。

输出:

val it : ParserResult<string,unit> =
  Failure:
Error in Ln: 1 Col: 15
<desc> Flange width </desc>
              ^
Expecting: '</desc>'
Run Code Online (Sandbox Code Playgroud)

我没有得到什么?或者这里的惯用解决方案是什么?

f# parser-combinators fparsec

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

在异步数据 getter 方法返回后,ASP.Net Core Blazor 页面如何知道刷新其内容?

问题不在于如何让它发挥作用,它是有效的。我只是感兴趣,但无法找出背景中发生的事情以使其工作。

主要示例是标准 Blazor 服务器 webapp 模板,它具有“计数器”和“fetchdata”组件。在 fetchdata 组件中,有protected override async Task OnInitializedAsync()一个被调用,组件呈现自身。如果 OnInitializedAsync() 没有及时返回,渲染仍然发生,在示例中只是写出加载......然后当 OnInitializedAsync() 真正完成时,组件被神奇地重新渲染,但是是什么导致了重新渲染? 它是如何连接在一起的?

框架是否经常查看类的内存以确定是否需要重新渲染?是否只是在 OnInitializedAsync() 调用之前和等待之后调用了页面渲染?

asp.net blazor

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