Reputation: 1811
I have a basic asp.net core 2.1 web API. I installed NSwag.ASPNetCore nuget package.
here is my startup.cs. When I run this on IIS Express, swagger is working fine. Once I deploy this to IIS, I am getting 404 not found. Do I need to add a Path somewhere?
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();
}
}
Upvotes: 1
Views: 3955
Reputation: 270
As mentioned by Rico below: upgrading to nswag v13 should fix the issue (for me it worked).
For versions of nswag before v13:
I had the same problem and I found a solution here: NSwag Issue #1914 What you need to do is configure a 'transform to external path':
app.UseSwaggerUi3(config =>
{
config.TransformToExternalPath = (s, r) =>
{
string path = s.EndsWith("swagger.json") && !string.IsNullOrEmpty(r.PathBase)
? $"{r.PathBase}{s}"
: s;
return path;
};
});
This worked for me on my iisexpress and on iis.
Upvotes: 1
Reputation: 962
Check if you do not use Virtual Path
for the application. Swagger by default checks absolute path instead of
localhost:port/MyVirtualPath/swagger/v1/swagger.json
It may happen when you use IIS server with virtual path delimiter.
Upvotes: 0