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