我有一个基本的asp.net core 2.1 Web API。我安装了NSwag.ASPNetCore nuget软件包。
这是我的startup.cs。当我在IIS Express上运行此程序时,swagger运行正常。 将其部署到IIS后,找不到404。 我需要在某处添加路径吗?
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(o => o.AddPolicy("CorsPolicy", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
services.AddMvc();
// Add framework services.
services.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
//Add Application Services
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSwaggerDocument();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseCors("CorsPolicy");
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseSwagger();
app.UseSwaggerUi3();
app.UseMvc();
}
}
答案 0 :(得分:0)
我遇到了同样的问题,并且在这里找到了解决方案:NSwag Issue #1914 您需要做的是配置“转换为外部路径”:
app.UseSwaggerUi3(config =>
{
config.TransformToExternalPath = (s, r) =>
{
string path = s.EndsWith("swagger.json") && !string.IsNullOrEmpty(r.PathBase)
? $"{r.PathBase}{s}"
: s;
return path;
};
});
这对我的iisexpress和iis都有效。
答案 1 :(得分:0)
检查应用程序是否不使用Virtual Path
。 Swagger默认检查绝对路径,而不是
localhost:port/MyVirtualPath/swagger/v1/swagger.json
当您将IIS服务器与虚拟路径定界符一起使用时,可能会发生这种情况。