我有一个已编译的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;但得到了相同的结果。
答案 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”作为格式的值传递。
当我调用http://localhost:7071/api/qotd/json
之类的函数时,它会将“json”作为值格式传递。