f# - 在使用 Swagger Type Provider 时,我应该怎么做才能防止出现 401 Unauthorized?

标签 f# swagger type-providers

尝试通过 Swagger 执行 HTTP 发布时(使用 Swagger Type Provider)我收到 401 Unauthorized。

我怀疑这个问题的答案可能是 UseDefaultCredentials,它在从 SwaggerProvider.Internal.ProvidedSwaggerBaseType 继承时不会公开。 .所以我在想一个向上的 :> 可能会有所帮助,但我在其他地方看到的帖子表明天真。

此外,更新 fsi.exe 的配置以包含以下内容证明是如意的:

<system.net>
  <defaultProxy enabled="true" useDefaultCredentials="true">
    <proxy usesystemdefault="True" />
  </defaultProxy>
</system.net>

有人可以简单回答吗?

谢谢

最佳答案

模式访问

SwaggerProvider 假定 Swagger 架构易于访问,并且可以使用简单的 Http 请求下载而无需身份验证

type PetStore = SwaggerProvider<"http://petstore.swagger.io/v2/swagger.json">

用户也可以像这样将任何 HTTP header 添加到模式请求

type PetStore = SwaggerProvider<"http://petstore.swagger.io/v2/swagger.json", "Content-Type=application/json">

它可以是Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l header,但是这个文字字符串会在源代码中被硬编码。

如果 schema-request 需要更复杂的身份验证,将更容易下载并将其放在源代码附近

[<Literal>]
let schemaPath = __SOURCE_DIRECTORY__ + "/PetStore.Swagger.json"
type PetStore = SwaggerProvider<schemaPath>

请求控制

当模式到位时,您可以使用提供的类型中的 CustomizeHttpRequest 参数完全控制对服务器的所有 HTTP 请求。

例如,如果您想使用默认凭据:

let store = 
  PetStore(
    CustomizeHttpRequest=
      fun (req:System.Net.HttpWebRequest) ->
        req.UseDefaultCredentials <- true
        req) 

您可以根据需要自由修改网络请求:

  • 使用默认凭据
  • 指定运行时凭证
  • 向 HTTP 请求添加 header
  • 将 cookie 添加到 HTTP 请求
  • 中断请求 ;) 等

CustomizeHttpRequest 将在每个请求的运行时调用,在 SwaggerProvider 构建它之后和调用服务器之前。所以你可以改变任何你想要的。

关于f# - 在使用 Swagger Type Provider 时,我应该怎么做才能防止出现 401 Unauthorized?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37566751/

相关文章:

concurrency - 保证发送到邮箱处理器的消息的顺序

f# - 有没有办法在 F# 中通过字符串获取记录字段?

recursion - 我如何表达阶乘 n!使用 F# 函数,递归还是其他方式?

swagger - 任何 : {$ref} in swagger JSON schema definition

f# - F#4中的编译器错误?

swagger - 打开没有响应属性的 Api 3.0 HEAD

asp.net-web-api - 标有 JsonIgnore 的属性仍显示在 Web API 的 Swagger UI 文档中

f# - F# 中的类型提供程序和静态参数

f# - 是否可以打开类型提供者提供的命名空间?

f# - 使用F#生成类型提供程序类型作为泛型类型参数