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

ASP.NET Core 6 Web API部署IIS后Swagger解析错误解决

解决ASP.NET Core 6 Web API部署IIS后Swagger解析错误问题

我开发的ASP.NET Core 6 Web API在本地运行正常,但部署至IIS后访问Swagger时,出现错误提示:“Parser error on line 13 end of the stream or a document separator is expected”。注意:我的Program.cs第13行并无特殊内容,请问该如何解决?

排查与解决方案

  • 修正SwaggerEndpoint路径配置
    你当前配置的SwaggerEndpoint使用了相对路径../swagger/v1/swagger.json,部署到IIS后,若应用处于虚拟目录下,相对路径会导致Swagger UI无法正确找到swagger.json文件。建议改为绝对路径:

    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My-APP API");
    

    如果应用部署在IIS的虚拟目录(如/MyApp),则路径需调整为/MyApp/swagger/v1/swagger.json,确保路径层级匹配站点实际部署结构。

  • 检查IIS基础配置

    • 确认应用池的.NET CLR版本设置为无托管代码,.NET Core版本选择6.0。
    • 验证站点物理路径指向Web API发布后的根目录(自包含部署)或wwwroot目录(框架依赖部署)。
    • 确保服务器已安装ASP.NET Core Hosting Bundle,缺少该组件会导致ASP.NET Core应用无法在IIS中正常运行。
  • 验证swagger.json生成状态
    直接访问http://你的站点域名/swagger/v1/swagger.json,检查是否能返回完整的JSON内容:

    • 若返回空白、错误页面或非JSON数据,说明Swagger生成过程存在异常,可通过Serilog日志排查控制器/模型的序列化问题(比如未处理的特殊类型、隐藏的循环引用)。
    • 若访问该URL时出现404,需确认Swagger服务在生产环境是否被正确启用(默认情况下ASP.NET Core会在非开发环境禁用Swagger,若需开启需手动配置环境判断)。
  • 清理并重新发布应用

    • 本地执行清理解决方案→重新生成操作,避免编译缓存导致的问题。
    • 重新发布应用到IIS,覆盖旧文件,确保发布配置包含所有必要的依赖文件。

附用户提供的Program.cs代码

using FluentValidation.AspNetCore;
using Serilog;
using System.Reflection;
using MyApp.API.Extensions;

var builder = WebApplication.CreateBuilder(args);
ConfigurationManager configuration = builder.Configuration;
var environment = builder.Environment;

// Add services to the container.
builder.Services.AddHttpContextAccessor();

builder.Services.AddMvc();
builder.Services.AddControllers().AddNewtonsoftJson(op => op.SerializerSettings.ReferenceLoopHandling
            = Newtonsoft.Json.ReferenceLoopHandling.Ignore);
builder.Services.AddControllers()
    .AddFluentValidation(options =>
    {
        options.RegisterValidatorsFromAssembly(Assembly.GetExecutingAssembly());
    });

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
// Swagger
builder.Services.AddSwaggerGen();
// Register Dependency Injection Service Extension
builder.Services.AddDependencyInjection();

// Add services to the container
var _logger = new LoggerConfiguration()
    .ReadFrom.Configuration(builder.Configuration)
    .Enrich.FromLogContext()
    .CreateLogger();
builder.Logging.ClearProviders();
builder.Logging.AddSerilog(_logger);

builder.Host.UseSerilog((ctx, lc) => lc
    .WriteTo.Console()
    .ReadFrom.Configuration(ctx.Configuration));

builder.Services.AddHttpClient();

var app = builder.Build();

app.UseSwagger();
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("../swagger/v1/swagger.json", "My-APP API");
});

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:34:52