Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在azure function 2.0中获取传入HTTP POST请求的URL?_C#_Azure Functions - Fatal编程技术网

C# 如何在azure function 2.0中获取传入HTTP POST请求的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

我想在变量中存储传入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.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;