You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 7.0配置Swagger遇资源获取错误及NLog异常求助

解决方案:Swagger资源获取错误与NLog异常修复

一、Swagger "Fetch error NetworkError" 问题修复

1. 调整中间件顺序

确保Swagger相关中间件未被路由、授权中间件拦截,正确的中间件顺序示例:

if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    app.UseSwagger();
    app.UseSwaggerUI(options =>
    {
        options.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");
        options.RoutePrefix = string.Empty;
    });
}

app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();

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

2. 标记控制器核心属性

所有API控制器必须添加[ApiController]属性,该属性是Swagger识别自定义路由API的关键:

[ApiController]
[Route("custom/[controller]")] // 自定义路由示例
public class TodoController : ControllerBase
{
    // Action方法实现
}

3. 配置XML注释生成完整文档

自定义路由的API需要XML注释辅助Swagger生成正确的swagger.json:

  1. 右键项目 → 属性 → 生成 → 勾选"XML文档文件",复制生成路径。
  2. 在AddSwaggerGen中添加注释配置:
using System.Reflection;

services.AddSwaggerGen(options =>
{
    options.SwaggerDoc("v1", new OpenApiInfo
    {
        Version = "v1",
        Title = "ToDo API",
        Description = "An ASP.NET Core Web API for managing ToDo items",
        TermsOfService = new Uri("https://example.com/terms"),
        Contact = new OpenApiContact
        {
            Name = "Example Contact",
            Url = new Uri("https://example.com/contact")
        },
        License = new OpenApiLicense
        {
            Name = "Example License",
            Url = new Uri("https://example.com/license")
        }
    });

    // 加载XML注释文件
    var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
    var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
    options.IncludeXmlComments(xmlPath);
});

4. 验证swagger.json可用性

直接在浏览器访问/swagger/v1/swagger.json:

  • 若返回404:检查是否存在全局路由前缀(如app.UsePathBase("/api")),需将SwaggerEndpoint改为"/api/swagger/v1/swagger.json"。
  • 若返回JSON但包含错误:根据错误信息排查路由模板冲突或控制器配置问题。

二、NLog "aspnet-request-statuscode" 异常修复

1. 确认NuGet包版本适配

安装适配.NET Core 7的NLog.Web.AspNetCore包(版本≥5.0),可通过命令行安装:

Install-Package NLog.Web.AspNetCore -Version 5.2.3

2. 修正nlog.config配置

确保<extensions>节点位于<nlog>根节点下,且布局渲染器拼写正确:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <extensions>
        <add assembly="NLog.Web.AspNetCore"/>
    </extensions>

    <!-- 示例文件输出配置 -->
    <targets>
        <target name="file" xsi:type="File" fileName="logs/${shortdate}.log"
                layout="${longdate} ${level} ${aspnet-request-statuscode} ${message} ${exception:format=ToString}"/>
    </targets>
    <rules>
        <logger name="*" minlevel="Debug" writeTo="file"/>
    </rules>
</nlog>

注意布局渲染器名称为${aspnet-request-statuscode},需包含$符号,避免拼写错误。

3. 正确注册NLog到应用宿主

在Program.cs中完成NLog的初始化与注册:

var logger = NLog.LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger();
try
{
    logger.Debug("启动应用");
    var builder = WebApplication.CreateBuilder(args);
    
    // 清除默认日志提供器,注册NLog
    builder.Logging.ClearProviders();
    builder.Host.UseNLog();

    // 其他服务配置
    builder.Services.AddControllers();
    // ...

    var app = builder.Build();
    // 中间件配置...
    app.Run();
}
catch (Exception ex)
{
    logger.Error(ex, "应用启动失败");
    throw;
}
finally
{
    NLog.LogManager.Shutdown();
}

4. 清理并重新生成项目

删除bin和obj目录,重新生成解决方案,确保NuGet包引用和配置文件生效。

内容的提问来源于stack exchange,提问作者Shahroz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 16:52:52