26

You can add a comment on the methods like the example below but what about adding comments to the request and response model?

/// <summary> /// my summary /// </summary> /// <remarks> /// remark goes here. /// </remarks> /// <param name="somepara">Required parameter: Example: </param> /// <return>Returns comment</return> /// <response code="200">Ok</response> 
0

5 Answers 5

22

I'm using .net core 3.0, so in addition to @Helder's response, I had to do below two more steps to make XML comments visible.

manually edit the project file.

<PropertyGroup> <GenerateDocumentationFile>true</GenerateDocumentationFile> <NoWarn>$(NoWarn);1591</NoWarn> </PropertyGroup> 

add below to startup.cs service configuration method.

services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "My Good API", Version = "v1", Description = "Doesn't hurt to add some description." }); // Set the comments path for the Swagger JSON and UI. var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); c.IncludeXmlComments(xmlPath); }); 

From the microsoft docs for Swagger

XML comments can be enabled with the following approaches:

  • Manually add the highlighted lines to the .csproj file:

Enabling XML comments provides debug information for undocumented public types and members. Undocumented types and members are indicated by the warning message. For example, the following message indicates a violation of warning code 1591:

Sign up to request clarification or add additional context in comments.

Comments

21

Yes just like Dimitar said, you can add comments to the responses with SwaggerResponse, the request is a bit different, just like you added xml comments to your action you should add to the parameters, here is an example:

using Swagger.Net.Annotations; using System; using System.Collections.Generic; using System.Net; using System.Web.Http; using System.Web.Http.Results; namespace Swagger_Test.Controllers { public class IHttpActionResultController : ApiController { [SwaggerResponse(HttpStatusCode.OK, "List of customers", typeof(IEnumerable<int>))] [SwaggerResponse(HttpStatusCode.NotFound, Type = typeof(NotFoundResult))] public IHttpActionResult Post(MyData data) { throw new NotImplementedException(); } } /// <summary>My super duper data</summary> public class MyData { /// <summary>The unique identifier</summary> public int id { get; set; } /// <summary>Everyone needs a name</summary> public string name { get; set; } } } 

And in swagger that will look like: enter image description here

10 Comments

And here is the code behind that: github.com/heldersepu/SwashbuckleTest/blob/…
now this is interesting I added /// <summary>The unique identifier</summary> ... just like in the shown example but the description is not displayed in swagger doc, my models are in a separate project (does it matter?)
Its a bug!? if you have external models swagger will not generate the model description. stackoverflow.com/questions/45203601/…
|
2

I am not sure if that's what exactly you're talking about, but you can add comments to the different responses like this

[SwaggerResponse(HttpStatusCode.Unauthorized, "Authorization has been denied for this request")] 

This is attribute which you use to decorate your controller method.

1 Comment

Adding response comments can also be done using XML - response code.
2

For those that aren't having luck with the existing answers, make sure that the project your property class lives in has the xml documentation enabled as well.

In my case, I had a separate project for my DTOs and needed to add it in there as well. Be sure to include xml comments from that project as well with another IncludeXmlComments method.

Comments

1

You can also add annotation without xml

 //program.cs builder.Services.AddSwaggerGen(c => { c.EnableAnnotations(); }); using Swashbuckle.AspNetCore.Annotations; //inside model class [SwaggerSchema(Description = "My super duper data")] public int Id { get; set; } //in controller [SwaggerOperation(Summary = "My controller")] public IHttpActionResult Post(MyData data) { throw new NotImplementedException(); } 

1 Comment

Placement reference: [SwaggerOperation(Summary="On method header", Description="On top, inside")]

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.