我有 2 个 Azure 网站(ASP.NET MVC 5 和 ASP.NET WebApi 2)。MVC 网站有一些 jQuery 尝试将 CORS 请求发布到 WebApi。如果直接连接到 WebApi,它就可以正常工作。但是,当尝试通过 API 管理进行连接时,它不起作用。
我在 Chrome 中遇到的错误是:
XMLHttpRequest 无法加载https://XXXXXX.azure-api.net/api/search。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问来源“ https://YYYYYY.azurewebsites.net ”。
我排除了 WebApi 配置的问题,因为正如我所说,它可以直接工作。
以下是我的政策:
<policies>
<inbound>
<cors>
<allowed-origins>
<origin>*</origin>
<!-- allow any -->
</allowed-origins>
<allowed-headers>
<header>accept</header>
<header>accept-encoding</header>
<header>access-control-request-headers</header>
<header>access-control-request-method</header>
<header>connection</header>
<header>content-type</header>
<header>host</header>
<header>origin</header>
<header>referer</header>
<header>user-agent</header>
</allowed-headers>
<expose-headers>
<header>access-control-allow-headers</header>
<header>access-control-allow-origin</header>
<header>cache-control</header>
<header>content-length</header>
<header>date</header>
<header>expires</header>
<header>pragma</header>
<header>server</header>
<header>set-cookie</header>
<header>x-aspnet-version</header>
<header>x-powered-by</header>
</expose-headers>
</cors>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
</policies>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我做了一些谷歌搜索但无法得到确认的答案:Azure API管理服务是否提供静态IP地址?如果没有,我该如何配置?
我要问的原因是因为我的内部部署服务器只接受来自白名单IP地址的请求,因此我们需要来自Azure API管理的请求的静态IP地址.
我领导着一个庞大的 azure 函数开发团队。因此,Microsoft 引用的大多数使用 azure Web 界面的示例对我都不起作用。我正在使用模拟器在本地开发 Azure 函数以节省一些成本。我通过 Visual Studio 将所有功能发布到我的集成环境中。
我正在开发一堆需要 api 网关来处理使用 Azure AD B2C 的身份验证工作流的 azure 函数。现在,没有可以在本地运行的 api 网关模拟器或 Azure AD B2C 模拟器。我的身份验证工作流程涉及拦截对 api 的请求,将它们重定向到 AD B2C 进行身份验证,随后将 auth-token 添加到 http 标头,然后调用 http 触发的 azure 函数。
现在,问题变成了,我如何测试身份验证工作流程?如何设置 api 网关以将我在 Visual Studio 中本地运行的函数注册为云中 api 网关的 api 端点?
restful-authentication azure azure-api-management azure-ad-b2c azure-functions
在 API 管理中,我创建了一个 API,可以调用无服务器函数应用程序。现在我想自动部署这个功能。以下是我在互联网上看到的可能性:
如果有人有经验、链接或想法,我将不胜感激。
问候,
我有一个 Azure 函数使用 API 管理服务中公开的 HttpClient API 调用服务结构 API。但是 API 管理服务日志显示 API 调用失败,问题 ID 为“ClientConnectionFailure at forward-request”。
在客户端,我收到 System.Net.Sockets.SocketException 和错误消息“操作被取消。无法从传输连接读取数据:由于线程退出或应用程序请求,I/O 操作已中止。由于线程退出或应用程序请求,I/O 操作已中止”
这种失败的可能原因是什么?如何解决?不幸的是,我找不到足够的文档?
我在此设置中配置了 Azure 应用程序网关和API 管理https://docs.microsoft.com/en-us/azure/api-management/api-management-howto-integrate-internal-vnet-appgateway - 应用程序网关是公共端点和仅定义的路由传递到 API 管理。
我想使用该ip-filter策略来限制对某些 IP 地址的调用。但是,当呼叫通过应用程序网关传入时,原始客户端 IP 地址将丢失或混淆为 IP 0.0.0.0。
有没有办法保留原始客户端 IP 地址并将其从应用程序网关传递到 API 管理?
Microsoft 发布了一个新的Azure API管理开发人员门户。
我正在寻找一种从API开发人员门户导出所有文件和配置并能够将其导入另一个的方法。因此,我可以将相同的自定义应用于我的所有APIM实例。
有没有办法做到这一点?
我们目前正在使用 Application Insights 的性能页面中的数据来监控 Web API,以便为我们提供每次操作收到的请求数。
我们的API解决方案的架构是使用APIM作为前端,应用服务作为后端。两个实例都启用了 App Insights,并且我们没有看到对 APIM 的请求数与对应用服务的请求数之间存在合理的相关性。此外,这仅在几次操作中最为明显。
例如,Apim-GetUsers 操作每天有 60,000 个请求(APIM 的 AI 实例)
AS-GetUsers 操作每天有 3,000,000 个请求(应用服务的 AI 实例)
Apim-GetUsers 将请求路由到 AS-GetUsers,并且 Apim-GetUsers 是唯一可以调用 AS-GetUsers 的操作。
鉴于此,我预计会在应用服务的 AI 性能页面上看到该操作的约 60,000 个请求,但我们看到的数字却很大。
我稍微研究了一下这个问题,发现有关采样的信息,以及一些 App Insights 功能使用 itemCount 属性来查找确切的请求数。总之,
我的期望是否正确,如果正确,可能是什么原因导致的?另外,禁用自适应采样并使用固定采样率会给我带来预期的结果吗?
我的期望是错误的吗?如果是的话,获得预期结果的好方法是什么?我不应该使用该指标的“性能”页面吗?
还没有尝试很多,因为在找到可行的解决方案之前我无法使用这些设置,但我研究了上面提到的采样和 itemCount 属性。APIM 采样设置为 100%。
我在 Log Analytics 中对请求表运行了一个查询,当我只使用请求计数时,我得到的数字更接近我在 APIM 中看到的数字,但是当我使用 itemCount 的总和时,正如一些 MS 所建议的那样文档中,我得到了性能页面中看到的巨大数字。
您正在使用的 NuGet 包和版本的列表:
运行时版本(例如net461、net48、netcoreapp2.1、netcoreapp3.1等。您可以从*.csproj文件中找到此信息):
托管环境(例如 Azure Web App、Linux、Windows、Ubuntu 等上的应用服务):
编辑1:操作_Id和itemCount的图片
azure-api-management azure-application-insights azure-appservice
我正在尝试使用 cli 获取我的产品的订阅密钥以及默认订阅密钥。我已浏览文档https://learn.microsoft.com/en-us/cli/azure/apim/api?view=azure-cli-latest,但现在我没有看到任何命令来获取我的信息订阅密钥。
\n虽然我可以看到有 powershell 方式来获取它,但我们在 ubuntu 管道中运行任务,并且下面列出的命令在 Linux 代理中不起作用。它说 Set-AzContext 不是已知命令
\n$subscriptionId = "id"\n$RG = "rg"\n$service = "apim-name"\n\nSet-AzContext -Subscription $subscriptionId\xc2\xa0\n\n$apimContext = New-AzApiManagementContext -ResourceGroupName $RG -ServiceName $service\n\nGet-AzApiManagementSubscriptionKey -Context $apimContext -SubscriptionId "master"\nRun Code Online (Sandbox Code Playgroud)\n更新\n我能够通过 DevOps 管道中的 Azure powershell 任务获取详细信息。如果 azure cli 中没有选项,我将使用它作为解决方法。
\nazure azure-api-management azure-cli azure-devops powershell-core
我使用如下所示的二头肌资源创建了一个应用程序服务
name: '${appName}'
location: location
kind: 'linux,container,fnapp'
properties: {
serverFarmId: servicePlan.id
siteConfig: {
linuxFxVersion: 'DOCKER|${dockerLocation}'
healthCheckPath: '/api/healthcheck'
alwaysOn: true
appSettings: [
...
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
它按预期工作,但是我想获取该应用程序服务的 url,以用作我的 apim 服务的后端 url。
我目前正在使用var fnAppUrl = 'https://${fnApp.name}.azurewebsites.net/api'. 有什么方法可以从函数应用程序资源的直接输出(即var fnAppUrl = fnApp.url或类似的东西)中获取默认网址?
TIA
azure azure-api-management azure-web-app-service azure-devops azure-bicep
azure ×7
azure-devops ×2
apim ×1
azure-ad-b2c ×1
azure-bicep ×1
azure-cli ×1
cors ×1
terraform ×1