Dotnet Core API
https://github.com/ASP-NET-MVC-Boilerplate/Templates
Packages:
- Microsoft.AspNetCore.Rewrite - Rewrite from home page to swagger
- Microsoft.AspNetCore.Mvc - api itself
- Microsoft.AspNetCore.Cors - cors
- Swashbuckle.AspNetCore - swagger
MVC
services.AddCors();
app.UseMvcWithDefaultRoute();Cors
services.AddCors();
app.UseCors(builder => builder.AllowCredentials().AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().Build());Rewriter
app.UseRewriter(new RewriteOptions().AddRedirect("^$", "swagger", (int)HttpStatusCode.MovedPermanently));redirect from homepage to swagger
Swagger
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info { Title = "Firebase Token Provider", Version = "v1" });
});
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
c.ShowJsonEditor(); // ediro for POST json requests
});Static files
TODO: copy examples, do not forget about UseDefaultFiles
Validate all request models
Cool trick - automatic validation of all models in application
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
namespace WebApplication1.Services
{
public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
{
context.Result = new BadRequestObjectResult(context.ModelState);
}
}
}
}Then connect it:
services.AddMvc(options => options.Filters.Add(new ValidateModelAttribute())).AddJsonOptions(x =>
{
x.SerializerSettings.ContractResolver = new DefaultContractResolver
{
NamingStrategy = new CamelCaseNamingStrategy
{
ProcessDictionaryKeys = true
}
};
});Note: now, erros will also be in camelCase