使用HttpTrigger属性在Azure功能中自定义路由

时间:2018-01-17 15:56:34

标签: c# function azure

我有一个已编译的Azure函数,我想使用HttpTrigger属性定义自定义路由。

我的代码如下所示:

public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = "qotd/{format}")]HttpRequestMessage req, string format, TraceWriter log)
{
  var quote = GetRandomQuote();
  if (format == "json")
  {
     return req.CreateResponse(HttpStatusCode.OK, quote, "application/json");
  }
  else
  {
     var strQuote = quote.Text + Environment.NewLine + quote.Author;
     return req.CreateResponse(HttpStatusCode.OK, strQuote, "text/plain");
  }
}

当我这样称呼时: 的本地主机:7071 / API / QOTD / JSON 我得到404。

当我这样称呼时: 的本地主机:7071 / API / QOTD /格式= JSON 然后功能成功。

如果我这样称呼它: 的本地主机:7071 / API / QOTD / 我得到一个相当讨厌的错误:

  

&#34;执行函数时出现异常:QotDFunction - &gt;异常绑定   参数&#39;格式&#39; - &GT;绑定数据不包含预期值   &#39;格式&#39; ...&#34;

如何在HttpTrigger的Route参数中定义绑定,以便我可以像这样调用我的函数:

localhost:7071 / api / qotd - 参数格式的默认值

localhost:7071 / api / qotd / json - 传递&#34; json&#34;作为格式的值?

对于路线,我也试过&#34; qotd / {format:alpha?}&#34;但得到了相同的结果。

2 个答案:

答案 0 :(得分:6)

原来我必须明确重建项目。重建它迫使VS以适当的路径创建一个新的function.json文件。如果不这样做,function.json仍然保留旧的默认路由。

答案 1 :(得分:2)

我测试你的代码并且不会得到与你相同的错误。

我创建了一个新的azure函数,它的默认Microsoft.NET.Sdk.Functions是版本1.0.2。我使用Azure.Functiuons.Cli的1.0.7版本来运行该功能。我的目标框架是.Net Framework 4.6.1。

我使用您的代码如下:

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;

namespace FunctionApp1
{
    public static class Function1
    {
        [FunctionName("Function2")]
        public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = "qotd/{format:alpha?}")]HttpRequestMessage req, string format, TraceWriter log)
        {

            if (format == "json")
            {
                return req.CreateResponse(HttpStatusCode.OK, "aaa", "application/json");
            }
            else
            {
                return req.CreateResponse(HttpStatusCode.OK, "aaa", "text/plain");
            }
        }
    }
}

当我调用http://localhost:7071/api/qotd之类的函数时,它会将“text”作为格式的值传递。

enter image description here

当我调用http://localhost:7071/api/qotd/json之类的函数时,它会将“json”作为值格式传递。 enter image description here