req.Content.ReadAsStringAsync()。从浏览器访问时结果总是 returns null(但不是在 Azure 门户中)
req.Content.ReadAsStringAsync().Result always returns null when accessed from browser (but not in Azure Portal)
下面包含我的完整代码(Azure 门户上的 Azure Function App)。特别注意这两行。
var jsonContent = req.Content.ReadAsStringAsync().Result;
log.LogInformation("jsonContent" + jsonContent);
当我使用右侧面板下的 请求主体 测试函数时,jsonContent
会按原样打印在日志中。但是,在浏览器中使用 函数 url,并将其附加 &name=azure
,jsonContent
为空,如日志中所示。
//full code
#r "Newtonsoft.Json"
using System.Net;
using Newtonsoft.Json;
using System.Text;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Web;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, ILogger log)
{
// these two lines are problematic???
var jsonContent = req.Content.ReadAsStringAsync().Result;
log.LogInformation("jsonContent" + jsonContent);
// you can ignore the following lines (not related to question)
string jsonToReturn = "Hello World";
return new HttpResponseMessage(HttpStatusCode.OK) {
Content = new StringContent(jsonToReturn, Encoding.UTF8, "application/json")
};
}
我试着把线路改成这个,但也没用。
var jsonContent = await req.Content.ReadAsStringAsync().Result;
错误类似于
'string' does not contain a definition for 'GetAwaiter' and no extension method 'GetAwaiter' accepting a first argument of type 'string' could be found (are you missing a using directive or an assembly reference?)
无论如何,我知道一个解决方法是使用 HttpRequest
而不是 HttpRequestMessage
来生成 jsonContent
,但我只是好奇为什么这种情况不起作用。
谁能发现我的错误?谢谢!
当您在浏览器中使用 &name=azure
追加函数 url 时,它 将 name=azure 设置为 http 请求头 。所以,如果你想发送带有请求正文的 http 请求,你可以使用 postman 来触发 Azure Function。
这是我的测试:
附加为查询不同于使用请求正文。您可以像这样在 Python 中调用该函数以及请求正文(仅作为示例):
reqBody = {
'customerid' : customerid,
'imgdata' : imgdata
}
headers = {
'Content-Type': 'application/json',
}
url = "https://xxxxx.azurewebsites.net/api/HTTPTrigger.............."
response = requests.post(url, headers=headers,
data=json.dumps(reqBody))
print(response.json())
下面包含我的完整代码(Azure 门户上的 Azure Function App)。特别注意这两行。
var jsonContent = req.Content.ReadAsStringAsync().Result;
log.LogInformation("jsonContent" + jsonContent);
当我使用右侧面板下的 请求主体 测试函数时,jsonContent
会按原样打印在日志中。但是,在浏览器中使用 函数 url,并将其附加 &name=azure
,jsonContent
为空,如日志中所示。
//full code
#r "Newtonsoft.Json"
using System.Net;
using Newtonsoft.Json;
using System.Text;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Web;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, ILogger log)
{
// these two lines are problematic???
var jsonContent = req.Content.ReadAsStringAsync().Result;
log.LogInformation("jsonContent" + jsonContent);
// you can ignore the following lines (not related to question)
string jsonToReturn = "Hello World";
return new HttpResponseMessage(HttpStatusCode.OK) {
Content = new StringContent(jsonToReturn, Encoding.UTF8, "application/json")
};
}
我试着把线路改成这个,但也没用。
var jsonContent = await req.Content.ReadAsStringAsync().Result;
错误类似于
'string' does not contain a definition for 'GetAwaiter' and no extension method 'GetAwaiter' accepting a first argument of type 'string' could be found (are you missing a using directive or an assembly reference?)
无论如何,我知道一个解决方法是使用 HttpRequest
而不是 HttpRequestMessage
来生成 jsonContent
,但我只是好奇为什么这种情况不起作用。
谁能发现我的错误?谢谢!
当您在浏览器中使用 &name=azure
追加函数 url 时,它 将 name=azure 设置为 http 请求头 。所以,如果你想发送带有请求正文的 http 请求,你可以使用 postman 来触发 Azure Function。
这是我的测试:
附加为查询不同于使用请求正文。您可以像这样在 Python 中调用该函数以及请求正文(仅作为示例):
reqBody = {
'customerid' : customerid,
'imgdata' : imgdata
}
headers = {
'Content-Type': 'application/json',
}
url = "https://xxxxx.azurewebsites.net/api/HTTPTrigger.............."
response = requests.post(url, headers=headers,
data=json.dumps(reqBody))
print(response.json())