C# 如何在azure function 2.0中获取传入HTTP POST请求的URL?
我想在变量中存储传入HTTP请求的URL。我使用的是C# 如何在azure function 2.0中获取传入HTTP POST请求的URL?,c#,azure-functions,C#,Azure Functions,我想在变量中存储传入HTTP请求的URL。我使用的是Environment.GetEnvironmentVariable(“网站\u主机名”),但它给出了托管azure函数的azure所在位置的URL 请参阅以下代码: #r "Newtonsoft.Json" #r "Microsoft.WindowsAzure.Storage" using System.Net; using System.Web; using Microsoft.AspNetCore.Mvc; using Microsoft
Environment.GetEnvironmentVariable(“网站\u主机名”)
,但它给出了托管azure函数的azure所在位置的URL
请参阅以下代码:
#r "Newtonsoft.Json"
#r "Microsoft.WindowsAzure.Storage"
using System.Net;
using System.Web;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using Microsoft.WindowsAzure.Storage.Blob;
public static async Task<IActionResult> Run(HttpRequest req, CloudBlockBlob outputBlob)
{
var requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
var referer = req.Headers["Referer"].ToString();
data.Add("url",referer);
//data.Add("url",Environment.GetEnvironmentVariable("WEBSITE_HOSTNAME"));
string output = JsonConvert.SerializeObject(data);
await outputBlob.UploadTextAsync(output);
return new OkObjectResult("Data has been received");
}
您可以像这样获取请求主机的URL 首先将
HttpRequest
更改为HttpRequestMessage
,然后下面两行将显示主机
var context = (DefaultHttpContext) req.Properties["HttpContext"];
var host = context.Request.Host;
我已经添加了带有输出的示例应用程序
[FunctionName("Function1")]
public async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Anonymous,"post", Route = null)]
HttpRequestMessage req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
var context = (DefaultHttpContext) req.Properties["HttpContext"];
var host = context.Request.Host;
log.LogInformation(host.ToString());
return req.CreateResponse(HttpStatusCode.Accepted);
}
[FunctionName(“Function1”)]
公共异步任务运行(
[HttpTrigger(AuthorizationLevel.Anonymous,“post”,Route=null)]
HttpRequestMessage请求,
ILogger日志)
{
LogInformation(“C#HTTP触发器函数处理了一个请求。”);
var context=(DefaultHttpContext)请求属性[“HttpContext”];
var host=context.Request.host;
log.LogInformation(host.ToString());
返回请求CreateResponse(HttpStatusCode.Accepted);
}
更新0823: 嘿,如果你仍然不知道如何获取url。您可以查看以下内容:
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
var referer = req.Headers["Referer"].ToString();
log.LogInformation("Referer is "+referer);
return new OkObjectResult($"");
}
在httptrigger中,请求头包含主机和引用器,主机是httptrigger的url,引用器是请求来自的url
确保您的请求不是从https到http的,否则引用程序将消失,您无法获取它。https到https或http到https是可以的
我已经尝试了您提出的问题。我从部署在Azure上的Web应用程序发送请求,并将其发送到httptrigger。最后,我得到了正确的url:
您可以从
HttpRequest-req
对象获取主机名:
HostString hostString = req.Host;
string host = hostString.Host;
int? port = hostString.Port;
string fullHost = hostString.Value;
req
参数允许您访问所有HTTP请求详细信息。var host=req.UserHostName代码>为什么“托管azure功能的my azure的URL”与“传入HTTP请求的URL”不同?请更清楚地解释您想要什么。@Coke错误CS1061:“HttpRequest”不包含“UserHostName”的定义,并且找不到接受“HttpRequest”类型的第一个参数的扩展方法“UserHostName”(是否缺少using指令或程序集引用?)如果用户的浏览器向URL发出请求,然后该站点或API向其他内容(如Azure函数)发出另一个请求,则没有“自动”方式将原始请求信息发送到Azure函数。你仍然可以捕获它。它必须作为请求的一部分显式发送。它给我Azure函数的URL。它给你HttpTrigger的URL吗?是的,它给我HttpTrigger的URL。@JayDesai你能更新你问题的代码吗,我会帮你找到什么happend@JayDesai如果您的代码仍然是Environment.GetEnvironmentVariable(“网站\主机名”),httpTrigger将为您提供httpTrigger的url,因为请求发送到的主机。如果你想获取请求来源的url,请使用Referer。它会提供我的Azure url。
var referer = req.Headers["Referer"].ToString();
log.LogInformation("Referer is "+referer);
var host = req.Host;
log.LogInformation("Host is " + host);
HostString hostString = req.Host;
string host = hostString.Host;
int? port = hostString.Port;
string fullHost = hostString.Value;