5.00 score from hupso.pl for:
mikelindegarde.com



HTML Content


Title mike lindegarde... online | things i'm likely to forget.

Length: 65, Words: 9
Description mike lindegarde... online - things i'm likely to forget. - things i'm likely to forget.

Length: 95, Words: 17
Keywords development,lessons learned,general,lessons
Robots
Charset UTF-8
Og Meta - Title pusty
Og Meta - Description pusty
Og Meta - Site name pusty
Tytuł powinien zawierać pomiędzy 10 a 70 znaków (ze spacjami), a mniej niż 12 słów w długości.
Meta opis powinien zawierać pomiędzy 50 a 160 znaków (łącznie ze spacjami), a mniej niż 24 słów w długości.
Kodowanie znaków powinny być określone , UTF-8 jest chyba najlepszy zestaw znaków, aby przejść z powodu UTF-8 jest bardziej międzynarodowy kodowaniem.
Otwarte obiekty wykresu powinny być obecne w stronie internetowej (więcej informacji na temat protokołu OpenGraph: http://ogp.me/)

SEO Content

Words/Characters 4145
Text/HTML 51.16 %
Headings H1 1
H2 5
H3 20
H4 15
H5 0
H6 0
H1
mike lindegarde... online
H2
validating api input in asp.net core 1.1 with fluentvalidation
lessons learned: always present the problem when asking for help with a solution
lazy loading properties with the null-coalescing operator
visual studio, .net core, and errorcode = '0x80004005'
using serilog, elasticsearch 5, and kibana 5 for effective error logging
H3
things i'm likely to forget.
getting started
the first pass (also known as the really bad idea)
the second (less bad) solution
the third and final attempt (for now)
conclusion
useful links
avoid the rabbit hole
present the complete picture
why use serilog over nlog
installing the jdk
 
setting up elasticsearch and kibana
using serilog
using kibana
validating api input in asp.net core 1.1 with fluentvalidation
lessons learned: always present the problem when asking for help with a solution
lazy loading properties with the null-coalescing operator
visual studio, .net core, and errorcode = '0x80004005'
using serilog, elasticsearch 5, and kibana 5 for effective error logging
H4 step 1: download the jdk
step 2: setting the java_home environment variable
step 1: download and install elasticsearch 
step 2: download and install kibana
step 1: add the required packages
step 2: modify your startup.cs
step 3: write some exceptions to elasticsearch
step 1: setup your index pattern
step 2: save a simple query
step 3: create a simple visualization
step 4: build your dashboard
recent posts
tagcloud
categorylist
monthlist
H5
H6
strong
project.json
.net core 1.1
.net core 1.0
current
project.json
java_home
advanced system settings
computer
properties
advanced system settings
advanced
environment variables...
variable name
bin
http://localhost:9200
http://localhost:5601
project.json
project.json
startup.cs
config
appsettings.json
literateconsole
literateconsole
coloredconsole
esconfig.enabled
autoregistertemplate
minimumlogeventlevel
customformatter
exceptionasjsonobjectformatter
indexformat
configure
ilogger
structuremap
indexformat
indexformat
index pattern
discover
discover
discover
query bar
save
all errors
save
visualize
vertical bar chart
vertical bar chart
all errors
x-axis
aggregation
date histogram
save
b
i
project.json
.net core 1.1
.net core 1.0
current
project.json
java_home
advanced system settings
computer
properties
advanced system settings
advanced
environment variables...
variable name
bin
http://localhost:9200
http://localhost:5601
project.json
project.json
startup.cs
config
appsettings.json
literateconsole
literateconsole
coloredconsole
esconfig.enabled
autoregistertemplate
minimumlogeventlevel
customformatter
exceptionasjsonobjectformatter
indexformat
configure
ilogger
structuremap
indexformat
indexformat
index pattern
discover
discover
discover
query bar
save
all errors
save
visualize
vertical bar chart
vertical bar chart
all errors
x-axis
aggregation
date histogram
save
em project.json
.net core 1.1
.net core 1.0
current
project.json
java_home
advanced system settings
computer
properties
advanced system settings
advanced
environment variables...
variable name
bin
http://localhost:9200
http://localhost:5601
project.json
project.json
startup.cs
config
appsettings.json
literateconsole
literateconsole
coloredconsole
esconfig.enabled
autoregistertemplate
minimumlogeventlevel
customformatter
exceptionasjsonobjectformatter
indexformat
configure
ilogger
structuremap
indexformat
indexformat
index pattern
discover
discover
discover
query bar
save
all errors
save
visualize
vertical bar chart
vertical bar chart
all errors
x-axis
aggregation
date histogram
save
Bolds strong 51
b 0
i 51
em 51
Zawartość strony internetowej powinno zawierać więcej niż 250 słów, z stopa tekst / kod jest wyższy niż 20%.
Pozycji używać znaczników (h1, h2, h3, ...), aby określić temat sekcji lub ustępów na stronie, ale zwykle, użyj mniej niż 6 dla każdego tagu pozycje zachować swoją stronę zwięzły.
Styl używać silnych i kursywy znaczniki podkreślić swoje słowa kluczowe swojej stronie, ale nie nadużywać (mniej niż 16 silnych tagi i 16 znaczników kursywy)

Statystyki strony

twitter:title pusty
twitter:description pusty
google+ itemprop=name pusty
Pliki zewnętrzne 18
Pliki CSS 6
Pliki javascript 12
Plik należy zmniejszyć całkowite odwołanie plików (CSS + JavaScript) do 7-8 maksymalnie.

Linki wewnętrzne i zewnętrzne

Linki 135
Linki wewnętrzne 48
Linki zewnętrzne 87
Linki bez atrybutu Title 92
Linki z atrybutem NOFOLLOW 0
Linki - Użyj atrybutu tytuł dla każdego łącza. Nofollow link jest link, który nie pozwala wyszukiwarkom boty zrealizują są odnośniki no follow. Należy zwracać uwagę na ich użytkowania

Linki wewnętrzne

about /page/about
log in /account/login.aspx
validating api input in asp.net core 1.1 with fluentvalidation /post/2017/01/14/validating-api-input-in-asp-net-core-1-1-with-fluentvalidation
development /category/development
(0) /post/2017/01/14/validating-api-input-in-asp-net-core-1-1-with-fluentvalidation#comment
jump to instructions #eb43fd11-instructions
using serilog, elasticsearch 5, and kibana 5 for effective error logging /post/2016/11/23/using-serilog-elasticsearch-and-kibana-for-effective-error-logging
lessons learned: always present the problem when asking for help with a solution /post/2017/01/13/lessons-learned-always-present-the-problem-when-asking-for-help-with-a-solution
lessons learned /category/lessons-learned
(0) /post/2017/01/13/lessons-learned-always-present-the-problem-when-asking-for-help-with-a-solution#comment
here /admin/app/editor/category/lessons-learned
lazy loading properties with the null-coalescing operator /post/2016/12/18/lazy-loading-properties-with-the-null-coalescing-operator
development /category/development
(0) /post/2016/12/18/lazy-loading-properties-with-the-null-coalescing-operator#comment
visual studio, .net core, and errorcode = '0x80004005' /post/2016/12/18/visual-studio-net-core-and-errorcode-0x80004005
development /category/development
lessons /category/lessons
(0) /post/2016/12/18/visual-studio-net-core-and-errorcode-0x80004005#comment
using serilog, elasticsearch 5, and kibana 5 for effective error logging /post/2016/11/23/using-serilog-elasticsearch-and-kibana-for-effective-error-logging
development /category/development
(0) /post/2016/11/23/using-serilog-elasticsearch-and-kibana-for-effective-error-logging#comment
skip to the instructions #39032dkj-instructions
here /post/2016/03/10/feeling-like-a-real-developer
my previous post /post/2016/11/20/strongly-typed-configuration-using-asp-net-core-1-0-and-structuremap
<< older posts
newer posts >>
2 /?page=2
3 /?page=3
older posts /?page=2

validating api input in asp.net core 1.1 with fluentvalidation

/post/2017/01/14/validating-api-input-in-asp-net-core-1-1-with-fluentvalidation

lessons learned: always present the problem when asking for help with a solution

/post/2017/01/13/lessons-learned-always-present-the-problem-when-asking-for-help-with-a-solution

lazy loading properties with the null-coalescing operator

/post/2016/12/18/lazy-loading-properties-with-the-null-coalescing-operator

visual studio, .net core, and errorcode = '0x80004005'

/post/2016/12/18/visual-studio-net-core-and-errorcode-0x80004005

using serilog, elasticsearch 5, and kibana 5 for effective error logging

/post/2016/11/23/using-serilog-elasticsearch-and-kibana-for-effective-error-logging
- /category/feed/development
development (11) /category/development
   
- /category/feed/lessons-learned
lessons learned (1) /category/lessons-learned
- /category/feed/lessons
lessons (1) /category/lessons
january /2017/01/default
december /2016/12/default
november /2016/11/default
august /2016/08/default
march /2016/03/default

Linki zewnętrzne

home http://mikelindegarde.com/
archive http://mikelindegarde.com/archive
contact http://mikelindegarde.com/contact
mike lindegarde... online http://mikelindegarde.com/
- https://facebook.com/michael.lindegarde
- https://twitter.com/mlindegarde
- https://plus.google.com/+mikelindegarde
- http://mikelindegarde.com/syndication.axd
mlindegarde http://mikelindegarde.com/author/admin
basic understanding of ioc containers http://amzn.to/2jj6fjo
structuremap http://structuremap.github.io/
latest .net core sdk https://www.microsoft.com/net/download/core#/current
here https://github.com/jeremyskinner/fluentvalidation/wiki
action filters https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters
here http://sergeyakopov.com/fixing-fluentvalidation-quirks/
https://github.com/mlindegarde/examples-validation-api https://github.com/mlindegarde/examples-validation-api
the fluentvalidation repository https://github.com/jeremyskinner/fluentvalidation
microsoft's filters documentation https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters
serilog's home page https://serilog.net/
mlindegarde http://mikelindegarde.com/author/admin
mlindegarde http://mikelindegarde.com/author/admin
mlindegarde http://mikelindegarde.com/author/admin
thank you very much mr. hanselman http://www.hanselman.com/blog/visualstudio2015fixingdependenciesnpmnotinstalledfromfseventswithnodeonwindows.aspx
here https://www.microsoft.com/net/download/core#/current
mlindegarde http://mikelindegarde.com/author/admin
serilog https://serilog.net/
nlog http://nlog-project.org/
elasticsearch https://www.elastic.co/
current jdk from oracle http://www.oracle.com/technetwork/java/javase/downloads/index.html
get a book http://amzn.to/2f785my
https://www.elastic.co/downloads/elasticsearch https://www.elastic.co/downloads/elasticsearch
here https://www.elastic.co/guide/en/elasticsearch/reference/current/windows.html
https://www.elastic.co/downloads/kibana https://www.elastic.co/downloads/kibana
here https://www.elastic.co/guide/en/kibana/current/windows.html
stack overflow http://stackoverflow.com/questions/29261809/elastic-kibana-install-as-windows-service
here https://github.com/serilog/serilog/wiki/enrichment
here https://github.com/serilog/serilog-sinks-literate
here https://github.com/serilog/serilog-sinks-elasticsearch
refer to their documentation https://github.com/serilog/serilog/wiki/writing-log-events
discover documentation here https://www.elastic.co/guide/en/kibana/current/discover.html
official kibana documentation https://www.elastic.co/guide/en/kibana/current/dashboard.html
- https://www.amazon.com/definitive-antlr-4-reference/dp/1934356999/ref=as_li_ss_il?s=books&ie=utf8&qid=1484330596&sr=1-1&keywords=antlr4&linkcode=li2&tag=mlindegardebl-20&linkid=8a5b5c72f76c94582897d0b965735d5a
- https://www.amazon.com/dp/178646568x/ref=as_li_ss_il?_encoding=utf8&colid=12f23m8261b9h&coliid=i380n32hvp113b&linkcode=li2&tag=mlindegardebl-20&linkid=dbcef93973ce26e24168f7bf8d2dc928
- https://www.amazon.com/seven-concurrency-models-weeks-programmers/dp/1937785653/ref=as_li_ss_il?_encoding=utf8&psc=1&refrid=m3bswpkj7k3jag9c7pf4&linkcode=li2&tag=mlindegardebl-20&linkid=5ab2f95226c5973e00cb22898e0d9f7d
- https://www.amazon.com/game-programming-patterns-robert-nystrom/dp/0990582906/ref=as_li_ss_il?ie=utf8&qid=1484331456&sr=8-1&keywords=game+programming+patterns&linkcode=li2&tag=mlindegardebl-20&linkid=5f883ea47e32a9e148c5f3c9e5ca0c39
.net http://mikelindegarde.com/?tag=.net
.net core http://mikelindegarde.com/?tag=.net+core
.net core 1.0 http://mikelindegarde.com/?tag=.net+core+1.0
?? http://mikelindegarde.com/?tag=%3f%3f
antlr http://mikelindegarde.com/?tag=antlr
api http://mikelindegarde.com/?tag=api
appesttings.json http://mikelindegarde.com/?tag=appesttings.json
asp.net core http://mikelindegarde.com/?tag=asp.net+core
babun http://mikelindegarde.com/?tag=babun
c# http://mikelindegarde.com/?tag=c%23
coalesce http://mikelindegarde.com/?tag=coalesce
configuration http://mikelindegarde.com/?tag=configuration
cygwin http://mikelindegarde.com/?tag=cygwin
dsl http://mikelindegarde.com/?tag=dsl
elasticsearch http://mikelindegarde.com/?tag=elasticsearch
git http://mikelindegarde.com/?tag=git
gitlab http://mikelindegarde.com/?tag=gitlab
ioc http://mikelindegarde.com/?tag=ioc
kibana http://mikelindegarde.com/?tag=kibana
lessons learned http://mikelindegarde.com/?tag=lessons+learned
lexer http://mikelindegarde.com/?tag=lexer
linux http://mikelindegarde.com/?tag=linux
logging http://mikelindegarde.com/?tag=logging
null coalesce operator http://mikelindegarde.com/?tag=null+coalesce+operator
parser http://mikelindegarde.com/?tag=parser
reminder http://mikelindegarde.com/?tag=reminder
serilog http://mikelindegarde.com/?tag=serilog
services http://mikelindegarde.com/?tag=services
structuremap http://mikelindegarde.com/?tag=structuremap
swagger http://mikelindegarde.com/?tag=swagger
terminal http://mikelindegarde.com/?tag=terminal
tools http://mikelindegarde.com/?tag=tools
ubuntu http://mikelindegarde.com/?tag=ubuntu
version control http://mikelindegarde.com/?tag=version+control
virtualbox http://mikelindegarde.com/?tag=virtualbox
visual studio 2015 http://mikelindegarde.com/?tag=visual+studio+2015
vm http://mikelindegarde.com/?tag=vm
wcf http://mikelindegarde.com/?tag=wcf
zsh http://mikelindegarde.com/?tag=zsh
mike lindegarde... online http://mikelindegarde.com/
blogengine.net http://dotnetblogengine.net
fs http://seyfolahi.net/

Zdjęcia

Zdjęcia 20
Zdjęcia bez atrybutu ALT 14
Zdjęcia bez atrybutu TITLE 20
Korzystanie Obraz ALT i TITLE atrybutu dla każdego obrazu.

Zdjęcia bez atrybutu TITLE

http://mikelindegarde.com//image.axd?picture=/logos/portrait_3.png
custom/themes/standard-2015/images/facebook.png
custom/themes/standard-2015/images/twitter.png
custom/themes/standard-2015/images/googleplus.png
custom/themes/standard-2015/images/rss.png
/image.axd?picture=/screen_shots/computer-properties.jpg
/image.axd?picture=/screen_shots/kibana-index-pattern.png
/image.axd?picture=/screen_shots/kibana-discover-no-filter.png
/image.axd?picture=/screen_shots/kibana-visualize-tab.jpg
//ws-na.amazon-adsystem.com/widgets/q?_encoding=utf8&asin=1934356999&format=_sl160_&id=asinimage&marketplace=us&serviceversion=20070822&ws=1&tag=mlindegardebl-20
https://ir-na.amazon-adsystem.com/e/ir?t=mlindegardebl-20&l=li2&o=1&a=1934356999
//ws-na.amazon-adsystem.com/widgets/q?_encoding=utf8&asin=178646568x&format=_sl160_&id=asinimage&marketplace=us&serviceversion=20070822&ws=1&tag=mlindegardebl-20
https://ir-na.amazon-adsystem.com/e/ir?t=mlindegardebl-20&l=li2&o=1&a=178646568x
//ws-na.amazon-adsystem.com/widgets/q?_encoding=utf8&asin=1937785653&format=_sl160_&id=asinimage&marketplace=us&serviceversion=20070822&ws=1&tag=mlindegardebl-20
https://ir-na.amazon-adsystem.com/e/ir?t=mlindegardebl-20&l=li2&o=1&a=1937785653
//ws-na.amazon-adsystem.com/widgets/q?_encoding=utf8&asin=0990582906&format=_sl160_&id=asinimage&marketplace=us&serviceversion=20070822&ws=1&tag=mlindegardebl-20
https://ir-na.amazon-adsystem.com/e/ir?t=mlindegardebl-20&l=li2&o=1&a=0990582906
/content/images/blog/rssbutton.png
/content/images/blog/rssbutton.png
/content/images/blog/rssbutton.png

Zdjęcia bez atrybutu ALT

custom/themes/standard-2015/images/facebook.png
custom/themes/standard-2015/images/twitter.png
custom/themes/standard-2015/images/googleplus.png
custom/themes/standard-2015/images/rss.png
/image.axd?picture=/screen_shots/computer-properties.jpg
/image.axd?picture=/screen_shots/kibana-visualize-tab.jpg
//ws-na.amazon-adsystem.com/widgets/q?_encoding=utf8&asin=1934356999&format=_sl160_&id=asinimage&marketplace=us&serviceversion=20070822&ws=1&tag=mlindegardebl-20
https://ir-na.amazon-adsystem.com/e/ir?t=mlindegardebl-20&l=li2&o=1&a=1934356999
//ws-na.amazon-adsystem.com/widgets/q?_encoding=utf8&asin=178646568x&format=_sl160_&id=asinimage&marketplace=us&serviceversion=20070822&ws=1&tag=mlindegardebl-20
https://ir-na.amazon-adsystem.com/e/ir?t=mlindegardebl-20&l=li2&o=1&a=178646568x
//ws-na.amazon-adsystem.com/widgets/q?_encoding=utf8&asin=1937785653&format=_sl160_&id=asinimage&marketplace=us&serviceversion=20070822&ws=1&tag=mlindegardebl-20
https://ir-na.amazon-adsystem.com/e/ir?t=mlindegardebl-20&l=li2&o=1&a=1937785653
//ws-na.amazon-adsystem.com/widgets/q?_encoding=utf8&asin=0990582906&format=_sl160_&id=asinimage&marketplace=us&serviceversion=20070822&ws=1&tag=mlindegardebl-20
https://ir-na.amazon-adsystem.com/e/ir?t=mlindegardebl-20&l=li2&o=1&a=0990582906

Ranking:


Alexa Traffic
Daily Global Rank Trend
Daily Reach (Percent)









Majestic SEO











Text on page:

toggle navigation home archive contact about log in mike lindegarde... online things i'm likely to forget. validating api input in asp.net core 1.1 with fluentvalidation 14. january 2017 mlindegarde development (0) jump to instructions it doesn't matter if your api is nothing more than a facade for simple crud operations built on-top of an active record implementation or if your api is merely the gateway into your complex domain driven design that leverages the latest and greatest cqsr/es patterns to scale on demand: you need to validate your input. writing code to validate input is quite possibly one of the most tedious task ever created (right next to doing any sort of processing that involves any file format from the medical world). thankfully we are far from the days of having to manually handle that task. when i started my latest asp.net core 1.1 project i wanted a more expressive way to handle validation. enter fluentvalidation: a small library that does an excellent job handling input validation (high level validation before you get into the heart of your business logic). below i show you the three phases my validation code went through before i finally end up where i probably should have started. getting started before getting to far into this tutorial you'll want to make sure you: have a basic understanding of ioc containers (preferably structuremap) have the latest .net core sdk installed know how to create an asp.net core 1.1 web api project (i'll let you handle your own google search) the first pass (also known as the really bad idea) i knew i wanted to use fluentvalidation and i know that asp.net has built in model validation. what i didn't know was how to bring them together. eventually i got there, but it took a few passes. the first step was a given, add the required dependencies to my project.json file: { "dependencies": { "microsoft.netcore.app": { "version": "1.1.0", "type": "platform" }, "microsoft.aspnetcore.mvc": "1.1.0", // other dependencies removed for brevity "structuremap.microsoft.dependencyinjection": "1.3.0", "fluentvalidation.aspnetcore": "6.4.0-beta9", "serilog": "2.3.0", "serilog.extensions.logging": "1.3.1", "serilog.sinks.literate": "2.0.0" }, // other sections removed for brevity } with that in place i wrote a few validators for the input into my post and put action handlers. you can find all of the documentation for fluentvalidation here. below is an example command and it's related validator: public class addrecipe { public guid id {get; set;} public guid createdby {get; set;} public datetime createdat {get ;set;} public string title {get; set;} public string instructions {get; set;} public list ingredients {get; set;} } public class addrecipevalidator : abstractvalidator { private static readonly datetime mindate = new datetime(2000, 1, 1); private static readonly datetime maxdate = new datetime(2100, 1, 1); public addrecipevalidator() { rulefor(cmd => cmd.id).notempty(); rulefor(cmd => cmd.createdby).notempty().notequal(cmd => cmd.id); rulefor(cmd => cmd.createdat).must(bevaliddate) .withmessage("'created at' must be a valid date"); rulefor(cmd => cmd.title).length(5, 100); rulefor(cmd => cmd.ingredients).notempty(); } private bool bevaliddate(datetime input) { return input.date > mindate && input.date < maxdate; } } next, i wanted a generic way to get the validator for a given class based on the class's type. i didn't want to have to know what the exact type of the validator implementation was. this seemed like a good time to use structuremap (in reality, it wasn't). here's how you could use structuremap if you really really wanted to (for some reason): in your structuremap scanner configuraiton add the following line: s.connectimplementationstotypesclosing(typeof(abstractvalidator<>)); connectimplementationstotypesclosing will allow you to get an instance of a given validator knowing only the type of the object the validator handles. i wanted to be able to get an instance of a validator using the same syntax i would use to get any other object from my ioc container. while i generally avoid extension methods, this seems like a good place to put the pattern to use: public static class structuremaputilities { public static ivalidator trygetvalidatorinstance(this icontainer container) { return container.trygetinstance>(); } } with that in place, you can validate the input to your controller's action methods as follows: [httppost] public iactionresult post([frombody,required] addingredient command) { if(command == null) return badrequest(); validationresult result = _container .trygetvalidatorinstance()?.validate(command); if(result?.isvalid == false) return badrequest(result); return createdatroute("getingredient", new {id = guid.newguid()}, null); } that's, ummm.... not good. there are a few major problems with this solution: it requires injecting my ioc container into the controller (leaky abstraction, i might as well have my repositories return iqueryable while i'm at it) i have to type the same few lines at the beginning of every method where i want to validate the input the second (less bad) solution surface level validation is kind of a cross-cutting concern right? aspect oriented programming is a way to handle cross-cutting concerns... aop frequently uses attributes... i can use an attribute to handle my validation. a few degrees short of kevin bacon and i have a new direction: validateinputattribute: public class validateinputattribute : actionfilterattribute { public override void onactionexecuting(actionexecutingcontext context) { if(context.modelstate.isvalid) return; context.result = new badrequestobjectresult(context.modelstate); } } progress. this solution allowed me to pull the ioc container out of my controllers. it also simplified the code for validating input: [httppost] [validateinput] public iactionresult post([frombody,required] addreview command) { return createdatroute("getreview", new {id = guid.newguid()}, null); } unfortunately i still had one problem: i can't inject my logging framework of choice into an attribute. well, where there's a will there's a way... but if you have to work that hard to get something to work, there's probably a better solution... the third and final attempt (for now) filters allow you to execute code in the mvc action pipeline prior to the action being executed but after the model had been bound via action filters. this seems like the perfect place to solve my problem. before we can handle validation errors in a filter we first need to update our startup class's configureservices method: public iserviceprovider configureservices(iservicecollection services) { services.addmvc() .addfluentvalidation( fv => fv.registervalidatorsfromassemblycontaining()); return services.addstructuremap(); } the highlighted lines above will configure things so that fluentvalidation handles validating input for you and updates the modelstate accordingly. note, using this approach does not require structuremap. next you need to add an implementation of iactionfilter to handle validation errors: public class validateinputfilter : iactionfilter { #region private readonly ilogger _logger; #endregion #region constructor public validateinputfilter(ilogger logger) { _logger = logger.forcontext(); } #endregion #region iactionfilter implementation public void onactionexecuting(actionexecutingcontext context) { if(context.modelstate.isvalid) return; using(logcontext.pushproperties(buildidentityenrichers(context.httpcontext.user))) { _logger.warning("model validation failed for {@input} with validation {@errors}", context.actionarguments, context.modelstate? .selectmany(kvp => kvp.value.errors) .select(e => e.errormessage)); } context.result = new badrequestobjectresult( from kvp in context.modelstate from e in kvp.value.errors let k = kvp.key select new validationerror(validationerror.type.input, null, k, e.errormessage)); } public void onactionexecuted(actionexecutedcontext context) { // this filter doesn't do anything post action. } #endregion } the above code should be pretty straight forward. if there are no errors in the given model, simply return and do nothing. let the next filter do it's thing. if there is a problem with the modelstate, log it and let the client know that a bad request was made (http status code 400). note, in the current version of fluentvalidation if a null object is passed into your action method context.modelstate.isvalid will return true. given what i read here, that's not what i expected. conclusion i double my current solution is perfect and i'm almost certain it'll go through another refactoring (or two) as i continue to work on the project. hopefully you found something useful above. if not, thanks for taking the time to read this article and i would appreciate any feedback you might have. you can find a working example on github: https://github.com/mlindegarde/examples-validation-api useful links the links below my help answer any questions you may have: the fluentvalidation repository microsoft's filters documentation serilog's home page using serilog, elasticsearch 5, and kibana 5 for effective error logging lessons learned: always present the problem when asking for help with a solution 13. january 2017 mlindegarde lessons learned (0) this is a series of short posts that outline some important things i've learned over the years. while most of these should be obvious to a seasoned developer, a lot of them aren't so obvious to those just getting started. you can find other posts in this series here. avoid the rabbit hole i'm as guilty as anyone of this: you're trying to solve a problem and you're convinced you're going down the right path. eventually you come to a sticking point and off to stack overflow and/or google you go to find the answer to your very specific question. inevitably you get a response or find a solution that answers your question. however, somewhere in that answer is the suggestion that what you're attempting to do is a bit odd. your immediate reaction is something along the lines of "don't tell me i shouldn't be doing this, just tell me how to do it." or, "trust me, i'm solving a unique problem in an ingenious way." present the complete picture if you've ever find yourself in that situation, odds are there is a better solution. the problem is that the solution requires a completely different approach than the one you've taken. if you don't present the problem you're actually trying to solve no one can point out that there is a better solution. don't let your current knowledge limit your possible solutions. when asking for help (be it from the internet or a colleague) always start with the big picture. describe the problem you originally set out to solve. don't just ask how to ensure that the http request you're sending via javascript doesn't get cancelled before the browser closes. instead explain that you have concerns about user session length and security, then outline your current approach and the problem(s) you're having with it. odds are you'll learn something. you can't ask questions about things you don't know exist. don't let your current knowledge limit your possible solutions. lazy loading properties with the null-coalescing operator 18. december 2016 mlindegarde development (0) every now and again i want to lazily load a properties value using the null-coalescing operator. inevitably i've forgotten the proper syntax by the next time i want to use it: public someobject propertyname => _somefield ?? (_somefield = _container.getinstance()); visual studio, .net core, and errorcode = '0x80004005' 18. december 2016 mlindegarde development, lessons (0) i'm working on a new project. the solution and initial projects were setup by another developer (who did / is doing a great job). when i first attempted to run the project things didn't go quite as expected. instead of running, the asp.net mvc website immediately closed on me. no errors in the output, no exceptions thrown. it didn't matter if i ran it in iis express or in a console host. at first i thought it was an issue with missing dependencies. while i've had node.js and npm installed for a long time, i thought there might be a configuration issue between my npm install and visual studio. while that was a problem (thank you very much mr. hanselman), it wasn't the root problem. next i took a look at the windows event view to see what i could find in the system logs. when i tried to run the application via iis express it generated the following error: failed to start process with commandline '"c:\program files (x86)\microsoft visual studio 14.0\common7\ide\extensions\microsoft\web tools\projectsystem\vsiisexelauncher.exe" -debug -p "c:\program files\dotnet\dotnet.exe" -a "c:\my dev\remslogic\remslogic\src\remslogic\bin\debug\netcoreapp1.0\remslogic.dll" -pidfile "c:\users\mikel\appdata\local\temp\tmp93dd.tmp" -wd "c:\my dev\remslogic\remslogic\src\remslogic"', errorcode = '0x80004005'. according to the google box, error code 0x80004005 in asp.net apparently means it can't connect to the database. i checked my connection strings. everything looked right. finally it occurred to me to look at project.json and see what i might be missing. there it was, plan as day. this project is using .net core 1.1. i'm using a different computer than my normal dev work. i only had .net core 1.0 installed. you can install .net core 1.1 here. be sure you're looking at current downloads and not lts. moral of the story, always look at project.json before barking up the wrong forest. using serilog, elasticsearch 5, and kibana 5 for effective error logging 23. november 2016 mlindegarde development (0) why use serilog over nlog skip to the instructions for the longest time i didn't understand why everyone was so excited about serilog. i've used nlog for a long time and it seemed more than capable of doing what i needed: logging messages to some data store (log files, databases, etc...). then i stared using elasticsearch. suddenly i saw the light. structured event data always struck me as one of those neat features that wasn't really needed. however, once you start using something like elasticsearch the power of structured event data quickly become evident. adding the visualizations offered by kibana takes your logging to the next level. a quick glance at a dashboard and you instantly know if there has been an uptick in errors (or whatever you might be logging). the interactive visualizations allow you to quickly filter out noise and identify the root cause of problems you or your users might be experiencing. installing the jdk this part is frequently overlooked. you need to have java installed and running on the box you're planning to use as your elasticsearch server. for the purposes of this tutorial i'm going to assume that you're going to set things up on a windows machine. you'll also need to ensure that the java_home environment variable is correctly set. step 1: download the jdk you can download the current jdk from oracle. you'll want to click on the "java platform (jdk) 8u111 / 8u112" link. on the following page download the appropriate package (in my case it's jdk-8u111-windows-x64.exe). once the download completes run the installer and let it do it's thing. in most cases the default options (install location, etc...) are just fine. step 2: setting the java_home environment variable in order for elasticsearch to work you'll need to have the java_home variable set. in order to set the java_home variable you'll need to access the advanced system settings in windows. you can do that by: click on the start menu right click on computer select properties in the window that appears, select advanced system settings in the upper left. that will bring up a small dialog window with five tabs across the top: select advanced. click on environment variables... in the system variables section click new... for the variable name use java_home and for the value use the location of your install's bin directory setting up elasticsearch and kibana i'm not going to teach you the ins and outs of elasticsearch. i'm going to give you just enough information to get things up and running. elasticsearch is incredibly powerful and i strongly encourage you to get a book or consult with someone more knowledgeable than me. step 1: download and install elasticsearch elastic does a great job walking you through the steps necessary to setup elasticsearch on any platform. rather than repeating that information here, i'll simply point you in the right direction: https://www.elastic.co/downloads/elasticsearch. although the download page has some basic installation instructions, i found the instruction in the documentation to be much more helpful. you can find that information here. i would strongly recommend setting up elasticsearch as a service. however, you'll want to make sure you have elasticsearch successfully running before setting up the service. it's much easier to resolve problems when you can see the errors in the console window. step 2: download and install kibana installing kibana goes pretty much exactly like installing elasticsearch. simply download the compressed file, decompress to wherever you like, then run the bat file. you can download kibana from here: https://www.elastic.co/downloads/kibana. you can find better installation documentation here. if you want to setup kibana to run as a service you can use the following command in the windows console or your preferred terminal (you can see my setup here): sc create "elasticsearch kibana 4.0.1" binpath= "{path to batch file}" depend= "elasticsearch-service-x64" that handy little line comes to you courtesy of stack overflow. at this point you should be able to verify that elasticsearch is running at http://localhost:9200 and that kibana is running at http://localhost:5601 by visiting those urls in your preferred browser. using serilog as mentioned in the introduction, we'll be using serilog instead of nlog. this is so that we can take advantage of the structured data serilog gives us in our elasticsearch indexes. setting up serilog with .net core is pretty straight forward. step 1: add the required packages add the following packages to your project.json file: { "dependencies": { "microsoft.netcore.app": { "version": "1.0.0", "type": "platform" }, "swashbuckle": "6.0.0-beta902", "microsoft.applicationinsights.aspnetcore": "1.0.0", "microsoft.aspnetcore.mvc": "1.0.0", // removed for length "microsoft.extensions.options.configurationextensions": "1.0.0", "serilog": "2.3.0", "serilog.extensions.logging": "1.3.1", "serilog.sinks.literate": "2.0.0", "serilog.sinks.elasticsearch": "4.1.1" }, // truncated to save space } save your project.json file and let visual studio restore the packages. step 2: modify your startup.cs you'll need to modify your startup.cs in two places: the constructor and in the config method. first we'll look at the changes to the constructor: elasticsearchconfig esconfig = new elasticsearchconfig(); configuration.getsection("elasticsearch").bind(esconfig); loggerconfiguration loggerconfig = new loggerconfiguration() .enrich.fromlogcontext() .enrich.withproperty("application","app name") .writeto.literateconsole(); if(esconfig.enabled) { loggerconfig.writeto.elasticsearch(new elasticsearchsinkoptions(esconfig.uri) { autoregistertemplate = true, minimumlogeventlevel = (logeventlevel)esconfig.minimumlogeventlevel, customformatter = new exceptionasobjectjsonformatter(rendermessage:true), indexformat = esconfig.indexformat }); } log.logger = loggerconfig.createlogger(); looking at the code you should notice that loading settings from my appsettings.json file. if you need some help with that you read my previous post. i've enriched my events in two ways. first i've configured serilog to use the logcontext. for more information take a look at the serilog documentation here. the second enrichment simply puts the application name on every event generated by serilog. i always want serilog to write to the console (at least while the application is being developed). to accomplish that i'm using the literateconsole sink. if you want to know why i'm using the literateconsole over the coloredconsole you can read more about it here. lastly, depending on the value in esconfig.enabled i'm conditionally setting up the elasticsearch sink. you can find all the information about the various configuration options here. here is the short version: autoregistertemplate - tells serilog to automatically register a template for the indexes it creates using a template optimized for working with serilog events. minimumlogeventlevel - kind of straight forward. customformatter - in order to avoid deeply nested objects serilog writes inner exceptions as an array of exceptions. this can be problematic for visualizations and some queries. you can change this behavior using the exceptionasjsonobjectformatter. indexformat - this is the pattern serilog will use to generate the indexes it creates. typically it's something like "api-logs-{0:yyyy.mm.dd}". if you do not provide a format serilog will use it's default value. finally, modify your configure method: public void configure( iapplicationbuilder app, ihostingenvironment env, iloggerfactory loggerfactory, iapplicationlifetime applifetime) { loggerfactory.addserilog(); app.usemvc(); app.useswagger(); app.useswaggerui(); applifetime.applicationstopped.register(log.closeandflush); } that's it. now you're ready to start writing some events to elasticsearch. step 3: write some exceptions to elasticsearch you'll need to use serilog's ilogger interface wherever you need to log an event. i tend to use structuremap as my ioc container instead of the default implementation microsoft offers. this means i need to register the interface in my structuremap configuration: _.for().use(log.logger); once that is done, i can easily inject serilog into any object created via the ioc container (i.e. my controllers). writing an event with structured data to elasticsearch is as simple as making the following call in your code wherever appropriate: _logger.error(ex, "failed to create object requested by {@staff}", _staff) for more information about the features serilog offers please refer to their documentation. i encourage you to take advantage of source contexts whenever possible. having the sourcecontext property in your event data makes filtering a lot easier. using kibana it's taken a while, but you've finally got elasticsearch setup, kibana installed and running, and your source code writing events to an elasticsearch index. great... now it's time to start seeing the effort pay off. step 1: setup your index pattern if this is the first time you've run kibana you will most likely be looking at the screen where kibana asks you to tell it about your index pattern: if you recall, back when we setup the serilog elasticsearch sink one of the properties we configured was the indexformat. this is the value you'll want to use here less the date format portion of the string. if you used "api-logs-{0:yyyy.mm.dd}" for your indexformat, then the index pattern is "api-logs-". with the index pattern set you'll want to head over to the discover tab. step 2: save a simple query before you can discover anything you'll need to make sure you've logged at least a few events to elasticsearch. you'll also want to make sure that they occurred within the time frame you're currently viewing (look in the upper right corner of the kibana window). as long as you have some events stored in es, clicking on discover should display a window that looks something like this: in order to create a visualization you're going to need to save a search. you can find the full discover documentation here. for the purposes of moving forward, we'll save a simple search: in the query bar type in: level:error click on the search button (magnifying glass) click on save in the upper right corner give the search a slick name like all errors click save step 3: create a simple visualization with the search saved it's time to move over to the visualize section of kibana. there are several visualizations you can create. in this example we'll create a simple vertical bar chart using a date histogram to group the errors by date and time. creating this visualization is pretty straight forward: select the vertical bar chart option from the list of visualizations on the right you can select all errors from the list of saved searches in the next window select x-axis under aggregation choose date histogram leave all of the default settings click on the run button (looks like a play button) click save in the upper right step 4: build your dashboard with the visualization saved you can easily add it to your dashboard. you can find a lot more information about building dashboards than i can find in the official kibana documentation. << older posts newer posts >> newer posts123older posts recent posts validating api input in asp.net core 1.1 with fluentvalidation lessons learned: always present the problem when asking for help with a solution lazy loading properties with the null-coalescing operator visual studio, .net core, and errorcode = '0x80004005' using serilog, elasticsearch 5, and kibana 5 for effective error logging tagcloud .net .net core .net core 1.0 ?? antlr api appesttings.json asp.net core babun c# coalesce configuration cygwin dsl elasticsearch git gitlab ioc kibana lessons learned lexer linux logging null coalesce operator parser reminder serilog services structuremap swagger terminal tools ubuntu version control virtualbox visual studio 2015 vm wcf zsh categorylist development (11) lessons learned (1) lessons (1) monthlist 2017 january (2) 2016 december (2) november (3) august (2) march (4) copyright © 2017 mike lindegarde... online - powered by blogengine.net 3.3.0.0 - design by fs


Here you find all texts from your page as Google (googlebot) and others search engines seen it.

Words density analysis:

Numbers of all words: 3854

One word

Two words phrases

Three words phrases

the - 5.94% (229)
you - 3.68% (142)
log - 2.49% (96)
for - 2.1% (81)
and - 1.79% (69)
valid - 1.63% (63)
all - 1.22% (47)
our - 1.17% (45)
search - 1.09% (42)
that - 1.06% (41)
elastic - 0.99% (38)
here - 0.96% (37)
your - 0.96% (37)
ins - 0.91% (35)
elasticsearch - 0.91% (35)
can - 0.88% (34)
serilog - 0.86% (33)
use - 0.83% (32)
date - 0.83% (32)
set - 0.78% (30)
config - 0.75% (29)
put - 0.73% (28)
get - 0.73% (28)
this - 0.73% (28)
with - 0.7% (27)
error - 0.67% (26)
validation - 0.65% (25)
action - 0.57% (22)
public - 0.57% (22)
core - 0.54% (21)
some - 0.54% (21)
one - 0.54% (21)
.net - 0.54% (21)
input - 0.54% (21)
time - 0.52% (20)
kibana - 0.52% (20)
format - 0.49% (19)
using - 0.49% (19)
create - 0.49% (19)
out - 0.49% (19)
new - 0.49% (19)
event - 0.49% (19)
want - 0.47% (18)
add - 0.47% (18)
not - 0.47% (18)
problem - 0.44% (17)
install - 0.44% (17)
ever - 0.44% (17)
now - 0.44% (17)
own - 0.42% (16)
validator - 0.42% (16)
visual - 0.42% (16)
need - 0.42% (16)
load - 0.42% (16)
end - 0.42% (16)
run - 0.39% (15)
have - 0.39% (15)
filter - 0.39% (15)
from - 0.39% (15)
solution - 0.36% (14)
post - 0.36% (14)
start - 0.36% (14)
able - 0.36% (14)
was - 0.34% (13)
down - 0.34% (13)
you'll - 0.34% (13)
there - 0.34% (13)
know - 0.34% (13)
way - 0.34% (13)
i'm - 0.34% (13)
find - 0.34% (13)
look - 0.34% (13)
you're - 0.34% (13)
index - 0.34% (13)
code - 0.34% (13)
over - 0.34% (13)
step - 0.34% (13)
but - 0.34% (13)
project - 0.34% (13)
file - 0.31% (12)
object - 0.31% (12)
model - 0.31% (12)
service - 0.31% (12)
download - 0.31% (12)
like - 0.31% (12)
return - 0.31% (12)
errors - 0.31% (12)
dev - 0.29% (11)
let - 0.29% (11)
structuremap - 0.29% (11)
type - 0.29% (11)
click - 0.29% (11)
window - 0.29% (11)
setting - 0.29% (11)
save - 0.29% (11)
line - 0.29% (11)
right - 0.29% (11)
any - 0.29% (11)
microsoft - 0.29% (11)
validate - 0.29% (11)
container - 0.29% (11)
than - 0.26% (10)
it's - 0.26% (10)
are - 0.26% (10)
proper - 0.26% (10)
api - 0.26% (10)
fluentvalidation - 0.26% (10)
result - 0.26% (10)
http - 0.26% (10)
logging - 0.26% (10)
handle - 0.26% (10)
null - 0.23% (9)
created - 0.23% (9)
next - 0.23% (9)
less - 0.23% (9)
work - 0.23% (9)
visualization - 0.23% (9)
about - 0.23% (9)
when - 0.23% (9)
1.1 - 0.23% (9)
how - 0.23% (9)
here. - 0.23% (9)
what - 0.23% (9)
see - 0.23% (9)
data - 0.23% (9)
1.0 - 0.23% (9)
more - 0.23% (9)
select - 0.23% (9)
java - 0.21% (8)
modelstate - 0.21% (8)
class - 0.21% (8)
read - 0.21% (8)
application - 0.21% (8)
current - 0.21% (8)
documentation - 0.21% (8)
asp.net - 0.21% (8)
serilog. - 0.21% (8)
will - 0.21% (8)
into - 0.21% (8)
configuration - 0.21% (8)
ask - 0.21% (8)
where - 0.21% (8)
console - 0.21% (8)
first - 0.21% (8)
before - 0.21% (8)
give - 0.21% (8)
level - 0.21% (8)
configure - 0.18% (7)
method - 0.18% (7)
pattern - 0.18% (7)
very - 0.18% (7)
value - 0.18% (7)
while - 0.18% (7)
setup - 0.18% (7)
did - 0.18% (7)
void - 0.18% (7)
request - 0.18% (7)
posts - 0.18% (7)
lessons - 0.18% (7)
project. - 0.18% (7)
something - 0.18% (7)
learn - 0.18% (7)
home - 0.18% (7)
sure - 0.18% (7)
require - 0.18% (7)
should - 0.18% (7)
ioc - 0.18% (7)
esconfig - 0.18% (7)
information - 0.18% (7)
bad - 0.18% (7)
sink - 0.18% (7)
variable - 0.18% (7)
search. - 0.18% (7)
running - 0.18% (7)
implementation - 0.18% (7)
command - 0.18% (7)
things - 0.18% (7)
off - 0.16% (6)
learned - 0.16% (6)
register - 0.16% (6)
instance - 0.16% (6)
attribute - 0.16% (6)
going - 0.16% (6)
few - 0.16% (6)
events - 0.16% (6)
does - 0.16% (6)
always - 0.16% (6)
extension - 0.16% (6)
services - 0.16% (6)
set;} - 0.16% (6)
might - 0.16% (6)
properties - 0.16% (6)
don't - 0.16% (6)
elasticsearch. - 0.16% (6)
datetime - 0.16% (6)
following - 0.16% (6)
i've - 0.16% (6)
take - 0.16% (6)
studio - 0.16% (6)
mvc - 0.16% (6)
guid - 0.16% (6)
mlindegarde - 0.16% (6)
help - 0.16% (6)
matter - 0.16% (6)
context.modelstate - 0.16% (6)
once - 0.16% (6)
other - 0.16% (6)
simple - 0.16% (6)
{get - 0.16% (6)
development - 0.13% (5)
solve - 0.13% (5)
option - 0.13% (5)
control - 0.13% (5)
you've - 0.13% (5)
every - 0.13% (5)
most - 0.13% (5)
version - 0.13% (5)
loggerconfig - 0.13% (5)
indexformat - 0.13% (5)
final - 0.13% (5)
write - 0.13% (5)
kvp - 0.13% (5)
wanted - 0.13% (5)
just - 0.13% (5)
list - 0.13% (5)
(0) - 0.13% (5)
(log - 0.13% (5)
make - 0.13% (5)
dependencies - 0.13% (5)
string - 0.13% (5)
{get; - 0.13% (5)
rulefor(cmd - 0.13% (5)
system - 0.13% (5)
visualizations - 0.13% (5)
place - 0.13% (5)
given - 0.13% (5)
windows - 0.13% (5)
jdk - 0.13% (5)
java_home - 0.13% (5)
long - 0.13% (5)
only - 0.13% (5)
settings - 0.13% (5)
project.json - 0.13% (5)
ilogger - 0.13% (5)
instruction - 0.13% (5)
name - 0.13% (5)
didn't - 0.13% (5)
installed - 0.13% (5)
great - 0.1% (4)
user - 0.1% (4)
2016 - 0.1% (4)
operator - 0.1% (4)
view - 0.1% (4)
move - 0.1% (4)
thing. - 0.1% (4)
then - 0.1% (4)
build - 0.1% (4)
tell - 0.1% (4)
straight - 0.1% (4)
structured - 0.1% (4)
pretty - 0.1% (4)
git - 0.1% (4)
0x80004005 - 0.1% (4)
connect - 0.1% (4)
"1.0.0", - 0.1% (4)
_logger - 0.1% (4)
instead - 0.1% (4)
dashboard - 0.1% (4)
full - 0.1% (4)
bar - 0.1% (4)
default - 0.1% (4)
point - 0.1% (4)
section - 0.1% (4)
order - 0.1% (4)
template - 0.1% (4)
options - 0.1% (4)
call - 0.1% (4)
me. - 0.1% (4)
present - 0.1% (4)
exceptions - 0.1% (4)
upper - 0.1% (4)
refer - 0.1% (4)
we'll - 0.1% (4)
bin - 0.1% (4)
discover - 0.1% (4)
platform - 0.1% (4)
answer - 0.1% (4)
environment - 0.1% (4)
much - 0.1% (4)
package - 0.1% (4)
simply - 0.1% (4)
inject - 0.1% (4)
better - 0.1% (4)
here's - 0.1% (4)
started - 0.1% (4)
validation. - 0.1% (4)
at' - 0.1% (4)
finally - 0.1% (4)
static - 0.1% (4)
private - 0.1% (4)
createdat - 0.1% (4)
doing - 0.1% (4)
really - 0.1% (4)
addrecipe - 0.1% (4)
has - 0.1% (4)
example - 0.1% (4)
had - 0.1% (4)
also - 0.1% (4)
required - 0.1% (4)
via - 0.1% (4)
execute - 0.1% (4)
allow - 0.1% (4)
controller - 0.1% (4)
2017 - 0.1% (4)
writing - 0.1% (4)
validating - 0.1% (4)
startup - 0.1% (4)
instructions - 0.1% (4)
null) - 0.08% (3)
it. - 0.08% (3)
downloads - 0.08% (3)
command) - 0.08% (3)
loading - 0.08% (3)
null-coalescing - 0.08% (3)
power - 0.08% (3)
store - 0.08% (3)
nlog - 0.08% (3)
why - 0.08% (3)
december - 0.08% (3)
looking - 0.08% (3)
iis - 0.08% (3)
avoid - 0.08% (3)
1.1. - 0.08% (3)
container. - 0.08% (3)
readonly - 0.08% (3)
files - 0.08% (3)
errorcode - 0.08% (3)
wasn't - 0.08% (3)
'0x80004005' - 0.08% (3)
good - 0.08% (3)
quick - 0.08% (3)
(in - 0.08% (3)
would - 0.08% (3)
express - 0.08% (3)
adding - 0.08% (3)
approach - 0.08% (3)
installing - 0.08% (3)
query - 0.08% (3)
generate - 0.08% (3)
value. - 0.08% (3)
source - 0.08% (3)
property - 0.08% (3)
input. - 0.08% (3)
latest - 0.08% (3)
es, - 0.08% (3)
having - 0.08% (3)
doesn't - 0.08% (3)
button - 0.08% (3)
saved - 0.08% (3)
january - 0.08% (3)
under - 0.08% (3)
swagger - 0.08% (3)
mike - 0.08% (3)
indexes - 0.08% (3)
literateconsole - 0.08% (3)
box - 0.08% (3)
web - 0.08% (3)
removed - 0.08% (3)
advanced - 0.08% (3)
got - 0.08% (3)
problems - 0.08% (3)
pass - 0.08% (3)
google - 0.08% (3)
wherever - 0.08% (3)
"elasticsearch - 0.08% (3)
job - 0.08% (3)
getting - 0.08% (3)
packages - 0.08% (3)
modify - 0.08% (3)
two - 0.08% (3)
through - 0.08% (3)
below - 0.08% (3)
minimumlogeventlevel - 0.08% (3)
length - 0.08% (3)
(2) - 0.08% (3)
context.modelstate.isvalid - 0.08% (3)
lines - 0.08% (3)
#endregion - 0.08% (3)
constructor - 0.08% (3)
complete - 0.08% (3)
asking - 0.08% (3)
failed - 0.08% (3)
forward. - 0.08% (3)
there's - 0.08% (3)
here, - 0.08% (3)
those - 0.08% (3)
concern - 0.08% (3)
working - 0.08% (3)
however, - 0.08% (3)
above - 0.08% (3)
context) - 0.08% (3)
lot - 0.08% (3)
short - 0.08% (3)
that's - 0.08% (3)
uses - 0.08% (3)
knowledge - 0.08% (3)
effective - 0.08% (3)
possible - 0.08% (3)
iactionfilter - 0.08% (3)
filters - 0.08% (3)
validateinputfilter - 0.08% (3)
can't - 0.08% (3)
serilog, - 0.08% (3)
executed - 0.08% (3)
come - 0.08% (3)
#region - 0.08% (3)
page - 0.08% (3)
attempt - 0.08% (3)
solution. - 0.08% (3)
expected. - 0.05% (2)
configured - 0.05% (2)
logcontext. - 0.05% (2)
loggerconfiguration - 0.05% (2)
autoregistertemplate - 0.05% (2)
small - 0.05% (2)
log.logger - 0.05% (2)
startup.cs - 0.05% (2)
customformatter - 0.05% (2)
elasticsearchconfig - 0.05% (2)
(or - 0.05% (2)
another - 0.05% (2)
solutions. - 0.05% (2)
found - 0.05% (2)
service. - 0.05% (2)
eventually - 0.05% (2)
location - 0.05% (2)
them - 0.05% (2)
bring - 0.05% (2)
strongly - 0.05% (2)
encourage - 0.05% (2)
i'll - 0.05% (2)
installation - 0.05% (2)
serilog's - 0.05% (2)
easier - 0.05% (2)
probably - 0.05% (2)
questions - 0.05% (2)
bat - 0.05% (2)
file. - 0.05% (2)
preferred - 0.05% (2)
terminal - 0.05% (2)
basic - 0.05% (2)
tutorial - 0.05% (2)
advantage - 0.05% (2)
useful - 0.05% (2)
started. - 0.05% (2)
links - 0.05% (2)
been - 0.05% (2)
least - 0.05% (2)
histogram - 0.05% (2)
badrequestobjectresult( - 0.05% (2)
looks - 0.05% (2)
built - 0.05% (2)
nothing - 0.05% (2)
e.errormessage)); - 0.05% (2)
handles - 0.05% (2)
logger) - 0.05% (2)
kibana. - 0.05% (2)
vertical - 0.05% (2)
chart - 0.05% (2)
time. - 0.05% (2)
(look - 0.05% (2)
14. - 0.05% (2)
note, - 0.05% (2)
play - 0.05% (2)
likely - 0.05% (2)
older - 0.05% (2)
newer - 0.05% (2)
coalesce - 0.05% (2)
online - 0.05% (2)
lindegarde... - 0.05% (2)
tools - 0.05% (2)
(1) - 0.05% (2)
corner - 0.05% (2)
frame - 0.05% (2)
sink. - 0.05% (2)
task - 0.05% (2)
esconfig.enabled - 0.05% (2)
being - 0.05% (2)
far - 0.05% (2)
took - 0.05% (2)
creates - 0.05% (2)
change - 0.05% (2)
perfect - 0.05% (2)
provide - 0.05% (2)
problem. - 0.05% (2)
interface - 0.05% (2)
easily - 0.05% (2)
offers - 0.05% (2)
active - 0.05% (2)
quite - 0.05% (2)
documentation. - 0.05% (2)
update - 0.05% (2)
anything - 0.05% (2)
taken - 0.05% (2)
configureservices - 0.05% (2)
back - 0.05% (2)
kvp.value.errors - 0.05% (2)
method: - 0.05% (2)
design - 0.05% (2)
"api-logs-{0:yyyy.mm.dd}" - 0.05% (2)
variables - 0.05% (2)
"1.1.0", - 0.05% (2)
learned: - 0.05% (2)
missing - 0.05% (2)
developer - 0.05% (2)
syntax - 0.05% (2)
same - 0.05% (2)
running, - 0.05% (2)
connectimplementationstotypesclosing - 0.05% (2)
(for - 0.05% (2)
inevitably - 0.05% (2)
question. - 0.05% (2)
could - 0.05% (2)
thought - 0.05% (2)
issue - 0.05% (2)
npm - 0.05% (2)
were - 0.05% (2)
second - 0.05% (2)
overflow - 0.05% (2)
stack - 0.05% (2)
seemed - 0.05% (2)
kind - 0.05% (2)
root - 0.05% (2)
exact - 0.05% (2)
type. - 0.05% (2)
class's - 0.05% (2)
input.date - 0.05% (2)
must - 0.05% (2)
bit - 0.05% (2)
projects - 0.05% (2)
maxdate - 0.05% (2)
odds - 0.05% (2)
requires - 0.05% (2)
null); - 0.05% (2)
ensure - 0.05% (2)
guid.newguid()}, - 0.05% (2)
browser - 0.05% (2)
{id - 0.05% (2)
concerns - 0.05% (2)
_container - 0.05% (2)
limit - 0.05% (2)
different - 0.05% (2)
lazy - 0.05% (2)
addingredient - 0.05% (2)
immediate - 0.05% (2)
well - 0.05% (2)
post([frombody,required] - 0.05% (2)
18. - 0.05% (2)
picture - 0.05% (2)
iactionresult - 0.05% (2)
[httppost] - 0.05% (2)
methods - 0.05% (2)
seems - 0.05% (2)
_somefield - 0.05% (2)
me, - 0.05% (2)
studio, - 0.05% (2)
core, - 0.05% (2)
cross-cutting - 0.05% (2)
generated - 0.05% (2)
file: - 0.05% (2)
return; - 0.05% (2)
"2.0.0" - 0.05% (2)
users - 0.05% (2)
if(context.modelstate.isvalid) - 0.05% (2)
"serilog.sinks.literate": - 0.05% (2)
"1.3.1", - 0.05% (2)
"serilog.extensions.logging": - 0.05% (2)
purposes - 0.05% (2)
"2.3.0", - 0.05% (2)
"serilog": - 0.05% (2)
brevity - 0.05% (2)
set. - 0.05% (2)
"microsoft.aspnetcore.mvc": - 0.05% (2)
validators - 0.05% (2)
"platform" - 0.05% (2)
8u111 - 0.05% (2)
appropriate - 0.05% (2)
"type": - 0.05% (2)
case - 0.05% (2)
(be - 0.05% (2)
"version": - 0.05% (2)
etc...) - 0.05% (2)
"microsoft.netcore.app": - 0.05% (2)
"dependencies": - 0.05% (2)
context.result - 0.05% (2)
series - 0.05% (2)
quickly - 0.05% (2)
process - 0.05% (2)
trying - 0.05% (2)
1); - 0.05% (2)
"c:\program - 0.05% (2)
"c:\my - 0.05% (2)
according - 0.05% (2)
mindate - 0.05% (2)
means - 0.05% (2)
structuremap. - 0.05% (2)
occurred - 0.05% (2)
plan - 0.05% (2)
frequently - 0.05% (2)
computer - 0.05% (2)
this: - 0.05% (2)
outline - 0.05% (2)
november - 0.05% (2)
direction: - 0.05% (2)
addrecipevalidator - 0.05% (2)
understand - 0.05% (2)
ingredients - 0.05% (2)
used - 0.05% (2)
title - 0.05% (2)
obvious - 0.05% (2)
createdby - 0.05% (2)
validateinputattribute - 0.05% (2)
features - 0.05% (2)
onactionexecuting(actionexecutingcontext - 0.05% (2)
looked - 0.05% (2)
you can - 0.6% (23)
in the - 0.54% (21)
.net core - 0.36% (14)
of the - 0.34% (13)
need to - 0.34% (13)
want to - 0.31% (12)
to the - 0.31% (12)
if you - 0.31% (12)
at the - 0.31% (12)
on the - 0.26% (10)
to use - 0.23% (9)
can find - 0.23% (9)
with the - 0.18% (7)
to get - 0.18% (7)
click on - 0.18% (7)
} public - 0.18% (7)
i want - 0.18% (7)
for the - 0.18% (7)
you to - 0.16% (6)
visual studio - 0.16% (6)
to your - 0.16% (6)
core 1.1 - 0.16% (6)
the following - 0.16% (6)
what i - 0.16% (6)
ioc container - 0.16% (6)
using the - 0.13% (5)
rulefor(cmd => - 0.13% (5)
{get; set;} - 0.13% (5)
lessons learned - 0.13% (5)
you need - 0.13% (5)
look at - 0.13% (5)
going to - 0.13% (5)
you'll need - 0.13% (5)
setting up - 0.13% (5)
up the - 0.13% (5)
using serilog - 0.13% (5)
and in - 0.13% (5)
is the - 0.13% (5)
this is - 0.13% (5)
the index - 0.13% (5)
find a - 0.13% (5)
set;} public - 0.13% (5)
that the - 0.13% (5)
you'll want - 0.13% (5)
from the - 0.13% (5)
asp.net core - 0.13% (5)
might be - 0.1% (4)
present the - 0.1% (4)
i wanted - 0.1% (4)
to handle - 0.1% (4)
one of - 0.1% (4)
sure you - 0.1% (4)
mlindegarde development - 0.1% (4)
like a - 0.1% (4)
how to - 0.1% (4)
in your - 0.1% (4)
the upper - 0.1% (4)
to solve - 0.1% (4)
step 2: - 0.1% (4)
step 1: - 0.1% (4)
and kibana - 0.1% (4)
add the - 0.1% (4)
time to - 0.1% (4)
create a - 0.1% (4)
it was - 0.1% (4)
the next - 0.1% (4)
in order - 0.1% (4)
make sure - 0.1% (4)
a simple - 0.1% (4)
errors in - 0.1% (4)
index pattern - 0.1% (4)
download the - 0.1% (4)
to make - 0.1% (4)
to elasticsearch - 0.1% (4)
to work - 0.1% (4)
public class - 0.1% (4)
time i - 0.08% (3)
for help - 0.08% (3)
instead of - 0.08% (3)
that you - 0.08% (3)
your current - 0.08% (3)
the null-coalescing - 0.08% (3)
to run - 0.08% (3)
when asking - 0.08% (3)
log in - 0.08% (3)
there is - 0.08% (3)
in that - 0.08% (3)
way to - 0.08% (3)
the application - 0.08% (3)
you're going - 0.08% (3)
a solution - 0.08% (3)
help with - 0.08% (3)
asking for - 0.08% (3)
effective error - 0.08% (3)
elasticsearch 5, - 0.08% (3)
using serilog, - 0.08% (3)
and let - 0.08% (3)
if there - 0.08% (3)
pretty straight - 0.08% (3)
a problem - 0.08% (3)
event data - 0.08% (3)
in asp.net - 0.08% (3)
information about - 0.08% (3)
modify your - 0.08% (3)
serilog to - 0.08% (3)
more information - 0.08% (3)
take a - 0.08% (3)
documentation here. - 0.08% (3)
i'm using - 0.08% (3)
use structuremap - 0.08% (3)
or your - 0.08% (3)
the default - 0.08% (3)
events to - 0.08% (3)
your index - 0.08% (3)
input in - 0.08% (3)
the search - 0.08% (3)
upper right - 0.08% (3)
straight forward. - 0.08% (3)
up elasticsearch - 0.08% (3)
when i - 0.08% (3)
error logging - 0.08% (3)
using a - 0.08% (3)
looking at - 0.08% (3)
serilog, elasticsearch - 0.08% (3)
5, and - 0.08% (3)
kibana 5 - 0.08% (3)
for effective - 0.08% (3)
2016 mlindegarde - 0.08% (3)
the right - 0.08% (3)
development (0) - 0.08% (3)
public void - 0.08% (3)
something like - 0.08% (3)
order to - 0.08% (3)
the value - 0.08% (3)
use the - 0.08% (3)
should be - 0.08% (3)
errorcode = - 0.08% (3)
a given - 0.08% (3)
while i - 0.08% (3)
the first - 0.08% (3)
to validate - 0.08% (3)
i didn't - 0.08% (3)
my ioc - 0.08% (3)
there are - 0.08% (3)
context) { - 0.08% (3)
wanted to - 0.08% (3)
have to - 0.08% (3)
the input - 0.08% (3)
with that - 0.08% (3)
{ return - 0.08% (3)
the validator - 0.08% (3)
a better - 0.08% (3)
{ public - 0.08% (3)
removed for - 0.08% (3)
let you - 0.08% (3)
i would - 0.08% (3)
get an - 0.08% (3)
handle validation - 0.08% (3)
allow you - 0.08% (3)
to create - 0.08% (3)
you the - 0.05% (2)
your preferred - 0.05% (2)
window that - 0.05% (2)
system settings - 0.05% (2)
more than - 0.05% (2)
advantage of - 0.05% (2)
is pretty - 0.05% (2)
your project.json - 0.05% (2)
java_home variable - 0.05% (2)
is running - 0.05% (2)
know that - 0.05% (2)
the constructor - 0.05% (2)
january 2017 - 0.05% (2)
the code - 0.05% (2)
in two - 0.05% (2)
have the - 0.05% (2)
running at - 0.05% (2)
advanced system - 0.05% (2)
be able - 0.05% (2)
how you - 0.05% (2)
download and - 0.05% (2)
a great - 0.05% (2)
that information - 0.05% (2)
you in - 0.05% (2)
as the - 0.05% (2)
your api - 0.05% (2)
here. i - 0.05% (2)
type of - 0.05% (2)
you should - 0.05% (2)
matter if - 0.05% (2)
the console - 0.05% (2)
settings in - 0.05% (2)
and install - 0.05% (2)
you want - 0.05% (2)
to setup - 0.05% (2)
a service - 0.05% (2)
encourage you - 0.05% (2)
#endregion #region - 0.05% (2)
the literateconsole - 0.05% (2)
took a - 0.05% (2)
click save - 0.05% (2)
you'll also - 0.05% (2)
"serilog.extensions.logging": "1.3.1", - 0.05% (2)
right corner - 0.05% (2)
as you - 0.05% (2)
"serilog": "2.3.0", - 0.05% (2)
to save - 0.05% (2)
find the - 0.05% (2)
for brevity - 0.05% (2)
on save - 0.05% (2)
// other - 0.05% (2)
all errors - 0.05% (2)
"platform" }, - 0.05% (2)
over to - 0.05% (2)
it's time - 0.05% (2)
bar chart - 0.05% (2)
date histogram - 0.05% (2)
the errors - 0.05% (2)
the list - 0.05% (2)
list of - 0.05% (2)
save in - 0.05% (2)
your dashboard - 0.05% (2)
validating api - 0.05% (2)
older posts - 0.05% (2)
newer posts - 0.05% (2)
"serilog.sinks.literate": "2.0.0" - 0.05% (2)
elasticsearch sink - 0.05% (2)
the serilog - 0.05% (2)
will use - 0.05% (2)
static readonly - 0.05% (2)
the download - 0.05% (2)
to know - 0.05% (2)
public string - 0.05% (2)
1.1 with - 0.05% (2)
the indexes - 0.05% (2)
it creates - 0.05% (2)
project.json file: - 0.05% (2)
serilog will - 0.05% (2)
indexes it - 0.05% (2)
do not - 0.05% (2)
some events - 0.05% (2)
in place - 0.05% (2)
to elasticsearch. - 0.05% (2)
step 3: - 0.05% (2)
wherever you - 0.05% (2)
public guid - 0.05% (2)
the documentation - 0.05% (2)
means i - 0.05% (2)
the ioc - 0.05% (2)
structured data - 0.05% (2)
all of - 0.05% (2)
for more - 0.05% (2)
{ "dependencies": - 0.05% (2)
an instance - 0.05% (2)
java_home environment - 0.05% (2)
if your - 0.05% (2)
context.result = - 0.05% (2)
a small - 0.05% (2)
obvious to - 0.05% (2)
in this - 0.05% (2)
trying to - 0.05% (2)
into an - 0.05% (2)
stack overflow - 0.05% (2)
command) { - 0.05% (2)
you get - 0.05% (2)
public iactionresult - 0.05% (2)
tell me - 0.05% (2)
odds are - 0.05% (2)
there's a - 0.05% (2)
if(context.modelstate.isvalid) return; - 0.05% (2)
mike lindegarde... - 0.05% (2)
you don't - 0.05% (2)
let your - 0.05% (2)
current knowledge - 0.05% (2)
limit your - 0.05% (2)
possible solutions. - 0.05% (2)
void onactionexecuting(actionexecutingcontext - 0.05% (2)
i have - 0.05% (2)
wanted a - 0.05% (2)
problem you - 0.05% (2)
2017 mlindegarde - 0.05% (2)
this tutorial - 0.05% (2)
an attribute - 0.05% (2)
it's thing. - 0.05% (2)
onactionexecuting(actionexecutingcontext context) - 0.05% (2)
{ if(context.modelstate.isvalid) - 0.05% (2)
e.errormessage)); } - 0.05% (2)
new badrequestobjectresult( - 0.05% (2)
} #endregion - 0.05% (2)
the modelstate - 0.05% (2)
for you - 0.05% (2)
no errors - 0.05% (2)
validating input - 0.05% (2)
filter do - 0.05% (2)
so that - 0.05% (2)
problem when - 0.05% (2)
into your - 0.05% (2)
action method - 0.05% (2)
we can - 0.05% (2)
the time - 0.05% (2)
you might - 0.05% (2)
place to - 0.05% (2)
seems like - 0.05% (2)
before you - 0.05% (2)
of your - 0.05% (2)
learned: always - 0.05% (2)
below i - 0.05% (2)
ensure that - 0.05% (2)
can use - 0.05% (2)
the current - 0.05% (2)
structured event - 0.05% (2)
iactionresult post([frombody,required] - 0.05% (2)
validate the - 0.05% (2)
have a - 0.05% (2)
public static - 0.05% (2)
the pattern - 0.05% (2)
this seems - 0.05% (2)
long time - 0.05% (2)
and it - 0.05% (2)
from my - 0.05% (2)
use to - 0.05% (2)
the latest - 0.05% (2)
= _container - 0.05% (2)
you or - 0.05% (2)
the jdk - 0.05% (2)
installed and - 0.05% (2)
instance of - 0.05% (2)
purposes of - 0.05% (2)
i'm going - 0.05% (2)
api is - 0.05% (2)
to ensure - 0.05% (2)
level validation - 0.05% (2)
able to - 0.05% (2)
can download - 0.05% (2)
here. be - 0.05% (2)
new {id - 0.05% (2)
lazy loading - 0.05% (2)
i might - 0.05% (2)
properties with - 0.05% (2)
cross-cutting concern - 0.05% (2)
december 2016 - 0.05% (2)
the proper - 0.05% (2)
the second - 0.05% (2)
studio, .net - 0.05% (2)
core, and - 0.05% (2)
{ "version": - 0.05% (2)
the solution - 0.05% (2)
doing a - 0.05% (2)
the project - 0.05% (2)
i thought - 0.05% (2)
= guid.newguid()}, - 0.05% (2)
npm install - 0.05% (2)
that was - 0.05% (2)
it wasn't - 0.05% (2)
the root - 0.05% (2)
a look - 0.05% (2)
project i - 0.05% (2)
see what - 0.05% (2)
find in - 0.05% (2)
the system - 0.05% (2)
null); } - 0.05% (2)
failed to - 0.05% (2)
{ "microsoft.netcore.app": - 0.05% (2)
you can find - 0.21% (8)
you'll need to - 0.13% (5)
click on the - 0.1% (4)
asp.net core 1.1 - 0.1% (4)
in the upper - 0.1% (4)
can find a - 0.1% (4)
to make sure - 0.1% (4)
effective error logging - 0.08% (3)
this is the - 0.08% (3)
2016 mlindegarde development - 0.08% (3)
allow you to - 0.08% (3)
in order to - 0.08% (3)
when asking for - 0.08% (3)
using serilog, elasticsearch - 0.08% (3)
5, and kibana - 0.08% (3)
5 for effective - 0.08% (3)
a better solution. - 0.08% (3)
i want to - 0.08% (3)
to get an - 0.08% (3)
asking for help - 0.08% (3)
serilog, elasticsearch 5, - 0.08% (3)
kibana 5 for - 0.08% (3)
want to make - 0.08% (3)
elasticsearch 5, and - 0.08% (3)
for effective error - 0.08% (3)
and kibana 5 - 0.08% (3)
present the problem - 0.08% (3)
the upper right - 0.08% (3)
to ensure that - 0.05% (2)
setting up elasticsearch - 0.05% (2)
the java_home variable - 0.05% (2)
you to get - 0.05% (2)
download and install - 0.05% (2)
a great job - 0.05% (2)
the java_home environment - 0.05% (2)
you can download - 0.05% (2)
java_home environment variable - 0.05% (2)
system settings in - 0.05% (2)
you can see - 0.05% (2)
i'm using the - 0.05% (2)
you want to - 0.05% (2)
events to elasticsearch. - 0.05% (2)
properties with the - 0.05% (2)
help with a - 0.05% (2)
lessons learned: always - 0.05% (2)
1.1 with fluentvalidation - 0.05% (2)
in asp.net core - 0.05% (2)
validating api input - 0.05% (2)
from the list - 0.05% (2)
you're going to - 0.05% (2)
over to the - 0.05% (2)
pretty straight forward. - 0.05% (2)
one of the - 0.05% (2)
the ioc container - 0.05% (2)
of the default - 0.05% (2)
serilog will use - 0.05% (2)
the indexes it - 0.05% (2)
using the literateconsole - 0.05% (2)
for the purposes - 0.05% (2)
for more information - 0.05% (2)
and in the - 0.05% (2)
i'm going to - 0.05% (2)
input in asp.net - 0.05% (2)
need to have - 0.05% (2)
private static readonly - 0.05% (2)
like a good - 0.05% (2)
get an instance - 0.05% (2)
be able to - 0.05% (2)
i wanted to - 0.05% (2)
instance of a - 0.05% (2)
add the following - 0.05% (2)
to use structuremap - 0.05% (2)
type of the - 0.05% (2)
set;} public string - 0.05% (2)
guid.newguid()}, null); } - 0.05% (2)
all of the - 0.05% (2)
that in place - 0.05% (2)
"1.3.1", "serilog.sinks.literate": "2.0.0" - 0.05% (2)
"serilog": "2.3.0", "serilog.extensions.logging": - 0.05% (2)
"type": "platform" }, - 0.05% (2)
"dependencies": { "microsoft.netcore.app": - 0.05% (2)
project.json file: { - 0.05% (2)
add the required - 0.05% (2)
way to handle - 0.05% (2)
new {id = - 0.05% (2)
context) { if(context.modelstate.isvalid) - 0.05% (2)
for a long - 0.05% (2)
lazy loading properties - 0.05% (2)
.net core 1.0 - 0.05% (2)
look at project.json - 0.05% (2)
see what i - 0.05% (2)
core 1.1 with - 0.05% (2)
to run the - 0.05% (2)
and errorcode = - 0.05% (2)
studio, .net core, - 0.05% (2)
with the null-coalescing - 0.05% (2)
your possible solutions. - 0.05% (2)
handle validation errors - 0.05% (2)
current knowledge limit - 0.05% (2)
don't let your - 0.05% (2)
is a better - 0.05% (2)
with a solution - 0.05% (2)
the problem when - 0.05% (2)
learned: always present - 0.05% (2)
know that a - 0.05% (2)
= new badrequestobjectresult( - 0.05% (2)
to handle validation - 0.05% (2)
no errors in - 0.05% (2)

Here you can find chart of all your popular one, two and three word phrases. Google and others search engines means your page is about words you use frequently.

Copyright © 2015-2016 hupso.pl. All rights reserved. FB | +G | Twitter

Hupso.pl jest serwisem internetowym, w którym jednym kliknieciem możesz szybko i łatwo sprawdź stronę www pod kątem SEO. Oferujemy darmowe pozycjonowanie stron internetowych oraz wycena domen i stron internetowych. Prowadzimy ranking polskich stron internetowych oraz ranking stron alexa.