自学内容网 自学内容网

Dify创建自定义工具,调用ASP.NET Core WebAPI时的注意事项(出现错误:Reached maximum retries (3) for URL ...)

1、要配置Swagger

using Microsoft.AspNetCore.Mvc;
using Microsoft.OpenApi.Models;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowSpecificOrigin",
        builder => builder.WithOrigins("http://172.20.10.7:5619") // 替换为你的Dify域名
                            .AllowAnyMethod()
                            .AllowAnyHeader());
});

// 添加控制器服务
builder.Services.AddControllers();

// 配置Swagger
builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo
    {
        Title = "PowerApi",
        Version = "v1",
        Description = "A simple API to calculate powers of a number from 0 to 50.",
        Contact = new OpenApiContact
        {
            Name = "Your Name",
            Email = "your.email@example.com",
            Url = new System.Uri("https://example.com")
        }
    });

    // 定义Schema
    c.MapType<Dictionary<int, double>>(() => new OpenApiSchema
    {
        Type = "object",
        AdditionalProperties = new OpenApiSchema
        {
            Type = "number"
        }
    });
});

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    app.UseSwagger();
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "PowerApi v1");
        c.DocumentTitle = "PowerApi Documentation";
    });
}

app.UseHttpsRedirection();

app.UseStaticFiles();
app.UseCookiePolicy();

app.Use(async (context, next) =>
{
    context.Response.Headers.Add("Content-Security-Policy", "script-src 'self';");
    await next();
});

app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
});

app.Run();

注意:IP地址的部分一定要写对了!不能是localhost或者127.0.0.1

2、launchSettings.json中

{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:1393",
      "sslPort": 44372
    }
  },
  "profiles": {
    "http": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "launchUrl": "swagger",
      "applicationUrl": "http://172.20.10.7:5169",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "https": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "launchUrl": "swagger",
      "applicationUrl": "https://172.20.10.7:7007;http://172.20.10.7:5169",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "swagger",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

注意:IP地址的部分一定要写对了!不能是localhost或者127.0.0.1

using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;

namespace PowerApi.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class PowerController : ControllerBase
    {
        [HttpGet("{number}")]
        public IActionResult GetPowers(double number)
        {
            try
            {
                var powers = new Dictionary<int, double>();

                for (int i = 0; i <= 50; i++)
                {
                    powers[i] = Math.Pow(number, i);
                }

                // 返回JSON格式的幂运算结果
                return Ok(new { powers = powers });
            }
            catch (Exception ex)
            {
                return StatusCode(500, $"Internal server error: {ex.Message}");
            }
        }
    }
}

3、符合OpenAPI Swagger规范的Schema:

{
      "openapi": "3.1.0",
      "info": {
        "title": "Get weather data",
        "description": "Retrieves current weather data for a location.",
        "version": "v1.0.0"
      },
      "servers": [
        {
          "url": "http://172.20.10.7:5169"
        }
      ],
      "paths": {
        "/api/folder": {
          "get": {
            "description": "Get temperature for a specific location",
            "operationId": "GetCurrentWeather",
            "deprecated": false
          }
        }
      },
      "components": {
        "schemas": {}
      }
 }

注意:IP地址的部分一定要写对了!不能是localhost或者127.0.0.1!

4、端口规则,一定要加。

结果:

好了,现在有手有脚了。


原文地址:https://blog.csdn.net/bdbox/article/details/142470791

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!