How to mark a property as required in Swagger, without ASP.NET model validation?
I am creating a public API that uses multiple private APIs (can not be accessed from outside). Business validations have been written for the private APIs and I do not want to re-write them for the public API. But I do want the swagger documentation to be the same.
That is why I wonder if I can mark property as mandatory, without using the Required attribute of ASP.NET. But that the swagger documentation indicates that it is mandatory. Is this possible?
c# asp.net swagger
add a comment |
I am creating a public API that uses multiple private APIs (can not be accessed from outside). Business validations have been written for the private APIs and I do not want to re-write them for the public API. But I do want the swagger documentation to be the same.
That is why I wonder if I can mark property as mandatory, without using the Required attribute of ASP.NET. But that the swagger documentation indicates that it is mandatory. Is this possible?
c# asp.net swagger
add a comment |
I am creating a public API that uses multiple private APIs (can not be accessed from outside). Business validations have been written for the private APIs and I do not want to re-write them for the public API. But I do want the swagger documentation to be the same.
That is why I wonder if I can mark property as mandatory, without using the Required attribute of ASP.NET. But that the swagger documentation indicates that it is mandatory. Is this possible?
c# asp.net swagger
I am creating a public API that uses multiple private APIs (can not be accessed from outside). Business validations have been written for the private APIs and I do not want to re-write them for the public API. But I do want the swagger documentation to be the same.
That is why I wonder if I can mark property as mandatory, without using the Required attribute of ASP.NET. But that the swagger documentation indicates that it is mandatory. Is this possible?
c# asp.net swagger
c# asp.net swagger
asked Nov 15 '18 at 12:31
UndeadparadeUndeadparade
460521
460521
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
Yes, it's possible. Add your custom class implementing IOperationFilter
public class UpdateParametersAsRequired : IOperationFilter
public void Apply(Operation operation, SchemaRegistry s, ApiDescription a)
if (operation.OperationId == "ControllerName_Action")
if (operation.Parameters != null)
foreach (var parameter in operation.Parameters)
if (parameter.Name == "ParameterYouWantToEdit")
// You can edit the properties here
parameter.Required = true;
else
// Add parameters if doesn't exists any
operation.Parameters = new List<IParameter>();
operation.Parameters.Add(
new Parameter
name = "ParameterName",
@in = "body",
@default = "123",
type = "string",
description = "x y z",
required = true
);
Cheers!
add a comment |
Thanks to Mohsin, I solved my problem. The following I came up with, I created an attribute called SwaggerRequired. This attribute can be placed on any model. The AddSwaggerRequiredSchemaFilter then ensures that the Swagger documentation is modified.
See below the code I wrote for this
A random model:
public class Foo
[SwaggerRequired]
public string FooBar get; set;
The SwaggerRequiredAttribute:
[AttributeUsage(AttributeTargets.Property)]
public class SwaggerRequiredAttribute : Attribute
And the AddSwaggerRequiredSchemaFilter to get it working:
public class AddSwaggerRequiredSchemaFilter : ISchemaFilter
public void Apply(Swashbuckle.Swagger.Schema schema, SchemaRegistry schemaRegistry, Type type)
PropertyInfo properties = type.GetProperties();
foreach (PropertyInfo property in properties)
var attribute = property.GetCustomAttribute(typeof(SwaggerRequiredAttribute));
if (attribute != null)
var propertyNameInCamelCasing = char.ToLowerInvariant(property.Name[0]) + property.Name.Substring(1);
if (schema.required == null)
schema.required = new List<string>()
propertyNameInCamelCasing
;
else
schema.required.Add(propertyNameInCamelCasing);
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53319588%2fhow-to-mark-a-property-as-required-in-swagger-without-asp-net-model-validation%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Yes, it's possible. Add your custom class implementing IOperationFilter
public class UpdateParametersAsRequired : IOperationFilter
public void Apply(Operation operation, SchemaRegistry s, ApiDescription a)
if (operation.OperationId == "ControllerName_Action")
if (operation.Parameters != null)
foreach (var parameter in operation.Parameters)
if (parameter.Name == "ParameterYouWantToEdit")
// You can edit the properties here
parameter.Required = true;
else
// Add parameters if doesn't exists any
operation.Parameters = new List<IParameter>();
operation.Parameters.Add(
new Parameter
name = "ParameterName",
@in = "body",
@default = "123",
type = "string",
description = "x y z",
required = true
);
Cheers!
add a comment |
Yes, it's possible. Add your custom class implementing IOperationFilter
public class UpdateParametersAsRequired : IOperationFilter
public void Apply(Operation operation, SchemaRegistry s, ApiDescription a)
if (operation.OperationId == "ControllerName_Action")
if (operation.Parameters != null)
foreach (var parameter in operation.Parameters)
if (parameter.Name == "ParameterYouWantToEdit")
// You can edit the properties here
parameter.Required = true;
else
// Add parameters if doesn't exists any
operation.Parameters = new List<IParameter>();
operation.Parameters.Add(
new Parameter
name = "ParameterName",
@in = "body",
@default = "123",
type = "string",
description = "x y z",
required = true
);
Cheers!
add a comment |
Yes, it's possible. Add your custom class implementing IOperationFilter
public class UpdateParametersAsRequired : IOperationFilter
public void Apply(Operation operation, SchemaRegistry s, ApiDescription a)
if (operation.OperationId == "ControllerName_Action")
if (operation.Parameters != null)
foreach (var parameter in operation.Parameters)
if (parameter.Name == "ParameterYouWantToEdit")
// You can edit the properties here
parameter.Required = true;
else
// Add parameters if doesn't exists any
operation.Parameters = new List<IParameter>();
operation.Parameters.Add(
new Parameter
name = "ParameterName",
@in = "body",
@default = "123",
type = "string",
description = "x y z",
required = true
);
Cheers!
Yes, it's possible. Add your custom class implementing IOperationFilter
public class UpdateParametersAsRequired : IOperationFilter
public void Apply(Operation operation, SchemaRegistry s, ApiDescription a)
if (operation.OperationId == "ControllerName_Action")
if (operation.Parameters != null)
foreach (var parameter in operation.Parameters)
if (parameter.Name == "ParameterYouWantToEdit")
// You can edit the properties here
parameter.Required = true;
else
// Add parameters if doesn't exists any
operation.Parameters = new List<IParameter>();
operation.Parameters.Add(
new Parameter
name = "ParameterName",
@in = "body",
@default = "123",
type = "string",
description = "x y z",
required = true
);
Cheers!
answered Nov 15 '18 at 14:08
MohsinMohsin
8119
8119
add a comment |
add a comment |
Thanks to Mohsin, I solved my problem. The following I came up with, I created an attribute called SwaggerRequired. This attribute can be placed on any model. The AddSwaggerRequiredSchemaFilter then ensures that the Swagger documentation is modified.
See below the code I wrote for this
A random model:
public class Foo
[SwaggerRequired]
public string FooBar get; set;
The SwaggerRequiredAttribute:
[AttributeUsage(AttributeTargets.Property)]
public class SwaggerRequiredAttribute : Attribute
And the AddSwaggerRequiredSchemaFilter to get it working:
public class AddSwaggerRequiredSchemaFilter : ISchemaFilter
public void Apply(Swashbuckle.Swagger.Schema schema, SchemaRegistry schemaRegistry, Type type)
PropertyInfo properties = type.GetProperties();
foreach (PropertyInfo property in properties)
var attribute = property.GetCustomAttribute(typeof(SwaggerRequiredAttribute));
if (attribute != null)
var propertyNameInCamelCasing = char.ToLowerInvariant(property.Name[0]) + property.Name.Substring(1);
if (schema.required == null)
schema.required = new List<string>()
propertyNameInCamelCasing
;
else
schema.required.Add(propertyNameInCamelCasing);
add a comment |
Thanks to Mohsin, I solved my problem. The following I came up with, I created an attribute called SwaggerRequired. This attribute can be placed on any model. The AddSwaggerRequiredSchemaFilter then ensures that the Swagger documentation is modified.
See below the code I wrote for this
A random model:
public class Foo
[SwaggerRequired]
public string FooBar get; set;
The SwaggerRequiredAttribute:
[AttributeUsage(AttributeTargets.Property)]
public class SwaggerRequiredAttribute : Attribute
And the AddSwaggerRequiredSchemaFilter to get it working:
public class AddSwaggerRequiredSchemaFilter : ISchemaFilter
public void Apply(Swashbuckle.Swagger.Schema schema, SchemaRegistry schemaRegistry, Type type)
PropertyInfo properties = type.GetProperties();
foreach (PropertyInfo property in properties)
var attribute = property.GetCustomAttribute(typeof(SwaggerRequiredAttribute));
if (attribute != null)
var propertyNameInCamelCasing = char.ToLowerInvariant(property.Name[0]) + property.Name.Substring(1);
if (schema.required == null)
schema.required = new List<string>()
propertyNameInCamelCasing
;
else
schema.required.Add(propertyNameInCamelCasing);
add a comment |
Thanks to Mohsin, I solved my problem. The following I came up with, I created an attribute called SwaggerRequired. This attribute can be placed on any model. The AddSwaggerRequiredSchemaFilter then ensures that the Swagger documentation is modified.
See below the code I wrote for this
A random model:
public class Foo
[SwaggerRequired]
public string FooBar get; set;
The SwaggerRequiredAttribute:
[AttributeUsage(AttributeTargets.Property)]
public class SwaggerRequiredAttribute : Attribute
And the AddSwaggerRequiredSchemaFilter to get it working:
public class AddSwaggerRequiredSchemaFilter : ISchemaFilter
public void Apply(Swashbuckle.Swagger.Schema schema, SchemaRegistry schemaRegistry, Type type)
PropertyInfo properties = type.GetProperties();
foreach (PropertyInfo property in properties)
var attribute = property.GetCustomAttribute(typeof(SwaggerRequiredAttribute));
if (attribute != null)
var propertyNameInCamelCasing = char.ToLowerInvariant(property.Name[0]) + property.Name.Substring(1);
if (schema.required == null)
schema.required = new List<string>()
propertyNameInCamelCasing
;
else
schema.required.Add(propertyNameInCamelCasing);
Thanks to Mohsin, I solved my problem. The following I came up with, I created an attribute called SwaggerRequired. This attribute can be placed on any model. The AddSwaggerRequiredSchemaFilter then ensures that the Swagger documentation is modified.
See below the code I wrote for this
A random model:
public class Foo
[SwaggerRequired]
public string FooBar get; set;
The SwaggerRequiredAttribute:
[AttributeUsage(AttributeTargets.Property)]
public class SwaggerRequiredAttribute : Attribute
And the AddSwaggerRequiredSchemaFilter to get it working:
public class AddSwaggerRequiredSchemaFilter : ISchemaFilter
public void Apply(Swashbuckle.Swagger.Schema schema, SchemaRegistry schemaRegistry, Type type)
PropertyInfo properties = type.GetProperties();
foreach (PropertyInfo property in properties)
var attribute = property.GetCustomAttribute(typeof(SwaggerRequiredAttribute));
if (attribute != null)
var propertyNameInCamelCasing = char.ToLowerInvariant(property.Name[0]) + property.Name.Substring(1);
if (schema.required == null)
schema.required = new List<string>()
propertyNameInCamelCasing
;
else
schema.required.Add(propertyNameInCamelCasing);
answered Nov 19 '18 at 14:52
UndeadparadeUndeadparade
460521
460521
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53319588%2fhow-to-mark-a-property-as-required-in-swagger-without-asp-net-model-validation%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown