Я пытаюсь включить swagger в своей функции Azure v4. Следовал примерам, как мог. Я вижу, что конечные точки чванства отображаются в окне журнала при локальной работе.
например, localhost:8190/api/swagger/ui
Однако когда я перехожу к конечной точке пользовательского интерфейса Swagger, я вижу сгенерированный HTTP 500 и пустой экран.
в program.cs
using Microsoft.Extensions.Hosting;
using Microsoft.Azure.Functions.Worker.Extensions.OpenApi.Extensions;
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureOpenApi() // Enable OpenAPI
.Build();
host.Run();
Класс функции
using System.Net;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Attributes;
using Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Enums;
using Microsoft.OpenApi.Models;
using Newtonsoft.Json;
namespace MyFunctionApp
{
public static class MyFunction
{
[Function("MyFunction")]
[OpenApiOperation(operationId: "Run", tags: new[] { "name" })]
[OpenApiParameter(name: "name", In = ParameterLocation.Query, Required = true, Type = typeof(string), Description = "The **Name** parameter")]
[OpenApiResponseWithBody(statusCode: HttpStatusCode.OK, contentType: "application/json", bodyType: typeof(string), Description = "The OK response")]
public static HttpResponseData Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequestData req)
{
var query = System.Web.HttpUtility.ParseQueryString(req.Url.Query);
string name = query["name"];
var response = req.CreateResponse(HttpStatusCode.OK);
response.Headers.Add("Content-Type", "application/json");
var responseBody = JsonConvert.SerializeObject(new { message = $"Hello, {name}!" });
response.WriteString(responseBody);
return response;
}
}
}
[обновлять]
Господи @#$#$@#$, я думал, что просто запущу новое функциональное приложение и оставлю минимум. И вот, это сработало. Потом я сравнил то, что у меня было. Обнаружил, что эта строка висит в моем program.cs
.ConfigureWebHostDefaults()
Убрал это, и появился мой чванливый интерфейс. Это явно было наступление на что-то.
Я сейчас пойду пнуть кирпичную стену
Я согласен и столкнулся с аналогичной проблемой, затем изменил ее на ConfigureFunctionsWebApplication
, и тогда это сработало для меня.
Программа.cs:
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
var rith = new HostBuilder()
.ConfigureFunctionsWebApplication()
.ConfigureServices(test =>
{
test.AddApplicationInsightsTelemetryWorkerService();
test.ConfigureFunctionsApplicationInsights();
})
.Build();
rith.Run();
Выход: