• Add new REST Service into existing ASP.net web application

    If you want to create a new webservice, you might use the new de-facto standard REST instead of previous solutions from Microsoft like SVC or ASMX. So here are some helpful information if you want to add your first REST Webservice into an existing ASP.net application.

     

    Setup new REST Service in ASP.net

    1. Create a new folder in your asp.net application
      It does not matter how you name the folder, it’s just to separate it from your other files. You could name the folder “Webservices” or “REST” or whatever you want.
    2. Add new item “Web API Controller Class (v2.1)”
      Right-click your new folder and select “Add new item”. Choose “Web API Controller Class (v2.1)” which is located in “Web” / “Web API”. Take care about the name of the new class! If you want to have REST urls like “/api/users/”, you need to name your new controller “UsersController” because IIS will automatically take the name of the resource (in current case “users”) and add “Controller” to it. Therefore it’s very important to choose the correct name here.
    3. Update global.asax
      While web.config is automatically updated as soon as you add your first Web API Controller Class, you manually need to update your Global.asax. Just add the new route to the “Application_Start” block. Here is an example which allows an optional ID to be supplied so you could call either “/api/users/” or else “/api/users/17” which will be processed in different functions in your UsersController:
      Web.Routing.RouteTable.Routes.MapHttpRoute(name:="DefaultApi", routeTemplate:="api/{controller}/{id}", defaults:=New With {
      Key .id = System.Web.Http.RouteParameter.[Optional]})

     

    Code new REST Service in ASP.net

    So now the setup is done and it’s time to create your webservice. Here are some hints when writing the code of your new webservice in ASP.net.

    1. Do not serialize your object in code
      Maybe you also use JSON.net, maybe not. However, don’t serialize your return value manually! You don’t need to do something like “JsonConvert.SerializeObject” because asp.net / iis will automatically do this for you. Just return the value you want to return, e.g. a string:
      Public Function GetExampleString() as String
      Return "Testvalue"
      End Function
      That’s it. No manual serialization necessary. If you manually serialize your return value, you will get additonal backslashes in your result. Let’s say you replace the above return statement with this one:
      Return JsonConvert.SerializeObject(“Testvalue”)
      This would serialize your return value twice. Therefore you will see in your receiving code something like “””\””Testvalue\””””” and result in error or at least unexpected values because the string would not be “Test” but “””Test”””. So to avoid these backslashes, don’t serialize manually!

     

    How to get supplied parameters from Request Header

    As there are many cases where you need to retrieve values supplied by the calling application from the RequestHeader, here is a function to do that:

    Friend Shared Function GetParameterFromHeader(ParameterName As Parameters) As String
    Dim headerList As NameValueCollection = HttpContext.Current.Request.Headers
    Dim parameterValue As String
    If headerList.HasKeys Then
       If headerList.AllKeys.Contains(ParameterName.ToString) Then
          parameterValue = headerList.Get(ParameterName.ToString)
        Else
           parameterValue = String.Empty
        End If
    Else
        parameterValue = String.Empty
    End If

    Return parameterValue
    End Function

     

     

    Further interesting resources are

Leave a comment

If you want to share your opinion, leave a comment.

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">