问题标签 [autorest]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
225 浏览

swagger - 使 AutoRest 将类映射到响应中的子对象

我正在尝试将客户端写入大型非 Swagger 记录的 API,并认为为其编写 swagger.json 并使用 AutoRest 将是实现此目的的好方法。案例是这个 API 将每个操作的响应数据包装到一个带有控制信息的更大对象中,如下所示:

在这种情况下,“数据”将是我们的“客户”定义。有没有办法定义 200 OK 响应模式和 swagger.json 文件中的定义,以便 AutoRest 将此“数据”映射到客户端类?

0 投票
0 回答
418 浏览

visual-studio-2015 - Visual Studio 2015 中的 AutoRest 参数

在 Visual Studio 2015 中使用 AutoRest 时(右键单击项目 -> 添加 -> REST API 客户端),传递给 autorest.exe 的参数在哪里?

如何设置或更改 Visual Studio 传入的任何标志?

某处是否有默认设置文件?

在库项目中生成代码(C#)时,AutoRest 只生成异步方法而不是同步方法(我想要的)。我怀疑这与 Visual Studio 传递的参数有关。

0 投票
1 回答
1155 浏览

c# - Swashbuckle 正在生成没有域类型信息的 Swagger 定义文件(缺少 #/definition/domain-type 部分)

当我发布我的 Azure REST API 应用程序时,结果很奇怪

1)“所有”记录的获取方法按预期工作,生成如下:

2) 对于Get by idUpdate和方法,它是用Delete而不是域对象生成的Createobject

结果,当我使用此 Delete、Update、Create 和 GetById 方法时,服务无法正常工作。如果我手动替换object为相应的域类型,它会按预期工作,但在每次服务发布后,都会重新创建错误的代码......

我尝试了 SwaggerConfig.cs 中的一些东西(IncludeParameterNamesInOperationIdFilter例如启用),但在这种情况下似乎没有帮助。

关于造成这种情况以及如何处理的任何想法?

PS我注意到一些更不愉快的行为——比如生成DateTimeasDateTimeOffset?byteas byte[],但我可以忍受。我不想定期战斗的是通过所有生成的代码将object类型更改为适当的域类型 - 在这种情况下编译器无能为力......

编辑

根据@olydis 的评论,事实证明生成的 swagger 定义文件缺少 form 中的返回类型定义$ref, "#/definition/domain-type"

MVA 课程中掌握 Azure 应用服务(模块 4。3:33 左右集成发现的演示)是生成的 swagger 定义文件的可见示例,并且存在这些类型定义。什么可能导致 Swashbuckle 不生成此信息?我有一个最新的 Swashbuckle 版本 5.xx 是否有 domain-type 必须满足的任何先决条件才能使 Swashbuckle 正确生成 Swagger 文件?

招摇定义文件

编辑#2

当前的解决方法

在生成 REST API 客户端之前手动编辑生成的 swagger 定义文件

0 投票
1 回答
1224 浏览

excel - VBA 自动重启

我正在创建一个自动重启 VBA excel 程序。当条件满足时(例如“L”),该程序将尝试重新启动并尝试满足相反的条件(例如“S”)

所以,我要创建的是:如果我从 L 开始,完成 L==>restart==> 完成 S==>restart==> 完成 L==>restart......... 同样如果我从 S 开始完成 S==>重新启动==> 完成 L==>重新启动==> 完成 S==>重新启动.........

我有以下代码:

例如,当我从 L 和 currentMarketPrice <= ThisWorkbook.Sheets("TradingPage").Range("U6") 开始时,它进入 findClosestMarketPrice() 并成功返回 "s" 并调用 StartAndStop.Start 'restart

但是在“Call StartAndStop.Start”之后,当它以 S 和 currentMarketPrice >= ThisWorkbook.Sheets("TradingPage").Range("U6") 开始时,它会自动进入 findClosestMarketPrice() 两次。比如:如果我从 L 开始,完成 L==>restart==> 完成 S==>restart==> 完成 L==>fulfill L==>restart==>fulfill S==>fulfill S==>restart ......... 同样如果我从 S 开始完成 S==>restart==> 完成 L==>restart==> 完成 S==>fulfill S==>restart==>fulfill L ==>履行L==>重启…………

这是错误的!

我怎样才能创建这样的程序:如果我从 L 开始,完成 L==>restart==> 完成 S==>restart==> 完成 L==>restart......... 同样如果我从 S 开始完成 S==>重新启动==> 完成 L==>重新启动==> 完成 S==>重新启动.........

0 投票
0 回答
231 浏览

c# - 动态成员调用的通用扩展方法

我正在尝试构建一个可以动态调用类的成员函数并返回指定类型的通用扩展方法。对于某些背景,这是一般问题:

我正在使用 Autorest 为 swagger API 生成一些客户端库。因为 API 中的一些 GET 路由会根据响应的 HTTP 状态码返回不同的对象,所以方法调用会返回object并且开发人员负责自己转换对象。我正在尝试创建一个方便的包装器来以通用方式进行此转换。

下面是一个典型的函数签名示例:

object IPet GetPets(string petName)

请注意,此方法可能会返回许多对象类型,具体取决于 HTTP 状态代码。例如,200 可能会返回一个Dog对象,但 404 可能会返回一个Cat对象。

这将通过 Autorest 生成的客户端库调用,如下所示:

我想把这个手动铸造功能变成更直观的东西,这就是我的想法:

在这种情况下,除“Dog”类型的对象之外的任何返回都将导致引发异常。这是我的实施尝试:

我在这里遇到的问题是将函数和参数传递给通用扩展方法。在不知道各种 API 调用可能需要的各种可能数量的参数的情况下,我如何进行Expression<Action<Tin, Targ>>一般定义?在我看来,我必须使用等来复制这个函数Expression<Action<T1, T2, T3>>以适应不同长度的参数列表。

我希望人们以一种富有表现力的方式与 API 进行交互,以便很容易看到正在发生的事情。但是,这种机制应该对未来的各种 API 更改具有鲁棒性。我目前的目标是提供一种封装常见对象转换和错误检查操作的方法。有一个更好的方法吗?目前,我假设服务器端 swagger doc 无法更改。

0 投票
2 回答
1183 浏览

c# - 使用 Autorest.exe 与 ADD->Rest API 客户端时不同的客户端输出

我正在尝试使用 Swagger 为 WebAPI 生成客户端代码。我通常通过下载元数据 json 文件(在部署 WebAPI 之后)然后为客户端类库使用选项“Add->Rest API Client..”来做到这一点。

添加 -> 休息 API 客户端

这将为所需的项目生成客户端库并且工作正常。但我正在尝试使用 Autorest.exe 自动化这个过程。我编写了小代码来执行带有参数的Autorest.exe以生成客户端代码,如下所示

但是新生成的客户端代码不起作用(不构建)并且与我在 Visual Studio 中使用 GUI 选项时得到的输出不同。

当我尝试构建新生成的代码时,我收到每个.cs文件的以下错误消息。

我需要帮助自动生成完美执行并与 GUI 生成的内容相匹配的客户端代码。提前致谢。

0 投票
1 回答
298 浏览

asp.net - WebApi 和 Swagger

我正在使用 asp.net webapi 并使用 swagger 通过 AutoRest 在 WPF 应用程序中创建 RestApi。如果出现错误,我无法弄清楚如何使用返回的数据。

我的控制器如下;

基于 AutoMapper 的错误,我碰巧在 WebApi 中出现了一个错误,但它被吞没了。它在响应中返回错误消息,这很棒。

这是此调用的当前 AutoRest 代码。

如您所见,它需要一个 int。如果我取消注释

int 返回类型变为对象。

所以真正的问题。这是我从 WPF 到 WebApi 的服务调用

如果返回一个对象,如果发生错误或刚刚返回简单的 int(成功),我该如何获取。

提前致谢。斯科特

0 投票
2 回答
986 浏览

c# - ADAL 本机应用程序令牌在 12 小时后过期

我创建了 .net 控制台应用程序,它是我的 web api 的客户端。这两个应用程序都在 azure 中注册。我希望我的控制台应用程序无需用户交互即可运行。控制台应用程序检查消息队列,如果消息到达,它会进行一些计算并将数据发送回我的 Web api。我使用 adal 来验证我的连接。我通过密钥进行身份验证。由于我的客户使用 AutoRest 生成的代码,我添加了 DelegatingHandler 来捕获每个请求并在发送之前添加授权标头:

如您所见,我正在使用已定义的授权上下文。感谢上面的代码,我可以在没有用户交互的情况下获得令牌。而这项工作就好了!但是12 小时后,应用程序开始返回Unauthorized错误。问题是如何预防?我认为该AcquireToken方法会处理令牌到期。我错过了什么吗?

编辑: 常量类:

0 投票
1 回答
119 浏览

c# - WebApi 为所有参数设置默认值

我正在将我们的服务器从 SOAP 迁移到 REST。我正在使用 swashbuckle 生成 api 文档并使用 autorest 来创建客户端。

我有很多带有签名的方法,它们允许:

1) 可空值

2) 可能允许空值的字符串

例如这样的方法:

不需要为 siteId、关键字或主页标题设置值。

据我所知,允许这些值为 null 我应该将该方法转换为如下内容:

现在这会导致很多问题:

1)由于我正在更改签名,因此很容易出错

2) 工作量很大,我有大约 300 种方法可以改变

3)我还需要更改客户端代码,这可能会导致更多错误

有没有办法在不更改信号的情况下将这些属性标记为可为空?也许我错过了一些东西。为大多数方法创建一个请求类可以工作,但是我又生成了很多无用的代码。

任何想法,将不胜感激 :)

0 投票
1 回答
1002 浏览

rest - MSAL、Azure MobileService 和 Auto REST 调用获得 401 Unauthorized

我有一个将 MobileServiceClient 和 AutoRest 用于 Azure App Service API App 的应用程序(目前在 UWP 中)。我成功使用了 winfbsdk 并且可以通过它进行身份验证,然后使用 FB 访问令牌作为 JObject 登录到 MobileService.LoginAsync。当通过应用程序内的 AutoRest 调用 API 应用程序时,我还会使用该 JObject 并将其发送到 x-zumo-auth 标头中。我想做的是能够使用 MicrosoftAccount 进行身份验证。如果我使用 MobileService.LoginAsync,我无法获得正确的令牌并将其传递给 AutoRest - 它总是以 401 Unauthorized 的形式返回。我尝试使用 MSAL,但它返回一个 Bearer 令牌,并且传递它也会返回 401 Unauthorized。有什么好的方法可以做到这一点吗?我开始走 MSAL 路线,因为那会支持 Windows 桌面,UWP 和 Xamarin Forms 这将是理想的。我只需要有关如何从中获取正确令牌以传递给 AutoRest HttpClient 的信息,该 AutoRest HttpClient 会返回到 Azure App Service API App。

更新: 如果我使用以下流程,它适用于 Facebook,但不适用于 MicrosoftAccount。

-带有WebAPI的Azure AppService(并通过浏览器进行测试)
-通过服务上的Azure仪表板进行安全设置并配置为允许Facebook或MicrosoftAccount

1.在我的UWP应用程序上,使用winfbsdk,我使用Facebook登录,然后获取FBSession .AccessTokenData.AccessToken 并将其插入到 JObject 中:

2.登录MobileServiceClient

  1. 使用 HttpClient 登录 API 应用程序并检索要在 X-ZUMO-AUTH 中使用的令牌

    /li>
  2. ApiAppClient.UpdateXZUMOAUTH 调用仅执行以下操作:


  3. 任何使用 ApiAppClient 的后续调用(使用 AutoRest 从我的 Azure AppService WebAPI 的 swagger json 创建)都包含 x-zumo-auth 标头并经过适当的身份验证。

    尝试使用 MicrosoftAccount 时会出现此问题。我似乎无法从 MSAL 或 LoginWithMicrosoftAsync 获得在 x-zumo-auth 中使用的正确令牌。

    对于上面的#1,在尝试使用 MicrosoftAccount 时,我使用了 MSAL,如下所示:

    /li>


并且 MSAuthentication_AcquireToken 定义如下,使用 Azure 示例中建议的接口和类:https ://github.com/Azure-Samples/active-directory-xamarin-native-v2

更新 - 可以使用 MobileServiceClient,但仍然无法使用 MSAL
我让它与 MobileServiceClient 一起使用如下:
1. 使用 MobileService.LoginAsync
2. 获取返回的 User.MobileServiceAuthenticationToken
3. 设置 X-ZUMO-AUTH 标头以包含用户。 MobileServiceAuthenticationToken


MSAL 仍然无法正常工作!
所以最初的问题仍然存在,我们需要将从 MSAL 返回的令牌的哪一部分传递给 X-ZUMO-AUTH 或其他标头,以便对 Azure AppService WebAPI 应用程序的调用进行身份验证?