Introduction

So this week I wanted to setup a webservice that also included authentication. As one usually does this time of the year, Santa needs his data to be protected so that the children can’t see which gifts they will receive.

I decided to help Santa by using ServiceStack and Easyhttp. And I described the servicestack in the first part of this post.

Easyhttp

First of all we need an httpclient.

```vbnet Private http As HttpClient

Private Sub InitializeClient()
    If http Is Nothing Then
        http = New HttpClient()
        http.Request.Accept = HttpContentTypes.ApplicationJson
    End If
End Sub```

Then we need a way to read our data. I wrote a DoGet method for this.

vbnet Private Function DoGet(ByVal url As String, ByVal parameters As Object) As Object Dim response As HttpResponse = Nothing If parameters IsNot Nothing Then response = http.Get(url, parameters) Else response = http.Get(url) End If If response.StatusCode = Net.HttpStatusCode.Unauthorized Then Console.WriteLine("Unauthorized") response = Nothing End If If response IsNot Nothing Then Return response.DynamicBody Else Return Nothing End If End Function Here I catch the httpStatuscode that tells me I’m unauthorized. So I can tell Santa to log in.

Now I just need a Login method.

vbnet Private Sub Authorize() Dim response = http.Post("http://localhost:58241/auth", New With {.UserName = "cbaes", .Password = "test1"}, HttpContentTypes.ApplicationJson) http.Request.Cookies = response.Cookie Console.WriteLine(response.DynamicBody.SessionId) Console.WriteLine(response.DynamicBody.UserName) Console.WriteLine("") End Sub Easy right. But watch out for the cookiemonster. I had to tell request to get the cookies from the response otherwise this won’t work. But Hadi promised to fix this next week.

One more method is for printing our results.

vbnet Private Sub PrintChild(ByVal children As Object) If children IsNot Nothing Then For Each child In children If child.Good = False Then Console.ForegroundColor = ConsoleColor.Red Else Console.ForegroundColor = ConsoleColor.Green End If Console.WriteLine(child.LastName) Next End If Console.ForegroundColor = ConsoleColor.White End Sub Lastly I also want to logout.

vbnet Private Sub LogOut() Dim response = http.Get("http://localhost:58241/auth/logout") http.Request.Cookies = response.Cookie End Sub I used a get for that, not sure that is the right way to do that, but it works.

And last but not least we put it all together.

vbnet Sub Main() Dim response As HttpResponse InitializeClient() PrintChild(DoGet("http://localhost:58241/GoodOrBad", Nothing)) Console.WriteLine("") Authorize() PrintChild(DoGet("http://localhost:58241/GoodOrBad", Nothing)) Console.WriteLine("") LogOut() PrintChild(DoGet("http://localhost:58241/GoodOrBad", Nothing)) Console.WriteLine("") Console.ReadLine() End Sub And here is the result.

Conclusion

Doing a get to do a log is a bit illogical but I’m probably doing it wrong. For the rest it was pretty painless.

And I seem to be a man of little words but lots of code. Oh well, there is worse things in this world.

In post 3 we will learn more about the use of roles.