简体   繁体   English

从Azure功能调用Asp.Net Web API端点

[英]Calling Asp.Net Web API endpoint from Azure function

I am trying to develop following scenario using Azure functions. 我正在尝试使用Azure功能开发以下场景。

I have developed Asp.Net Web API which handles the Database related operation. 我开发了Asp.Net Web API来处理数据库相关的操作。 Now, I want to implement a scheduler like functionality which will run once a day and will clean up junk data from database. 现在,我想实现一个类似于日常运行的调度程序,它将清理数据库中的垃圾数据。 I've created an endpoint for that in my Web API but I want to execute it on regular basis so I think to implement scheduler using Azure function's TimerTrigger function, is there any way to call my web api's endpoint in TimerTrigger function. 我已经在我的Web API中创建了一个端点,但我想定期执行它,所以我想用Azure函数的TimerTrigger函数实现调度程序,有没有办法在TimerTrigger函数中调用我的web api的端点。

How to handle my api's authentication in Azure function? 如何在Azure功能中处理我的api身份验证?

Thanks 谢谢

Update: 更新:

Based on mikhail's answer, finally I got the token using following code: 基于mikhail的回答,最后我使用以下代码获得了令牌:

var client = new HttpClient();
client.BaseAddress = new Uri(apirooturl);

var grant_type = "password";
var username = "username";
var password = "password";

var formContent = new FormUrlEncodedContent(new[]
{
    new KeyValuePair<string, string>("grant_type", grant_type),
    new KeyValuePair<string, string>("username", username),
    new KeyValuePair<string, string>("password", password)
});

var token = client.PostAsync("token", formContent).Result.Content.ReadAsAsync<AuthenticationToken>().Result;

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(token.token_type, token.access_token);

var response = await client.GetAsync(apiendpoint);
var content = await response.Content.ReadAsStringAsync();

Azure Function is running in a normal Web App, so you can do pretty much anything there. Azure Function在普通的Web应用程序中运行,因此您可以在那里做任何事情。 Assuming you are on C#, the function body might looks something like 假设您使用C#,函数体可能看起来像

var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = 
    new AuthenticationHeaderValue("Bearer", token);

var response = await client.GetAsync(url);
var content = await response.Content.ReadAsStringAsync();

您可能最好将整个数据库清理逻辑放入函数中并使其定时触发,这样您就可以完全保留API。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM