04 August, 2015

WebAPI 1: How to read [FromBody] parameters

For some reason – the small but important details are oftentimes difficult to recover and you are forced to resort to Googles search engine for a solution.

I have a WebAPI (version 1) method decorated with [FromBody] indicating that the WebAPI framework shall locate the ticketValue in the body of the request instead of from the URI which is the default when presented with simple types (such as string or int or…).

[POST("eticket/{version:int}")]
[
AllowAnonymous]
public void ETicket([FromBody] string ticketValue, int version)
{
//implementation omitted...
}

To my great surprise sending in the below HTTP POST request from Fiddler resulted in ticketValue being null.
The strange syntax in the body (=testValue) could also seem wrong to the first time eye, but as the WebAPI allows for only one body value, this is the syntax. I would have thought you should send in a syntax like: ticketValue=testValue, but this will not work.


image



 What I learned was:
The WebAPI uses the content-type of the incoming request to determine which media-formatter it uses to retrieve the values from the request. So the request needs to have this specified in the Request header as Content-Type: application/x-www-form-urlencoded (see below).
The below works and the WebAPI method (server side) is invoked populated from the Request when called.image

29 April, 2015

Azure TableStorage: Insert results in 400: Bad request

Just a reminder to self. If you run into an exception when inserting entities into a Azure Table; make sure that if you have any properties in your tableentry that are of type datetime, they must have a value > 01.01.1601 (and not the default value which is 01.01.0001).

Takes some time to pin point!

21 March, 2015

Windows 10 – running side by side with Windows 8.1

If you wish to try out Windows 10 (at the time of writing meaning build .10041) on your actual hardware as opposed to some virtual machine you can certainly do so if you utilize the VHD approach. This will allow Windows to run off the actual hardware of your laptop.

WP_20150321_21_29_38_Pro

It is a process that requires some steps though, so grab a cup of coffee and stay awake.

1) First – create a VHD file (Virtual Hard Drive)

image

image

2) Let it run. It will take some time as you have selected fixed size file (or disk if you will). This gives the best performance

3) Rightclick on the newly created disk and select “Initialize Disk”

4) Format the disk as “Simple Volume”

5) (you can double check that you indeed do have a file called C:\VHD\WIN10.vhd)

6) Now – insert your USB key with the Windows 10 ISO image into your laptop

7) Boot the laptop from this USB drive (press F12)

8) Press the Install Now button

image

9) When arriving at this page – select the “Custom: Install Windows only

image

10) Now – be careful here! You do not see your newly created VHD disk onto which you want to install Windows 10. This is the disk you want to see before continuing.

image

Press Shift + F10 and you will gain a command prompt:

image

11) type the following

diskpart [enter]

select vdisk file=c:\vhd\win10.vhd [enter]

attach vdisk [enter]

12) Now return to your drive overview, press Refresh and witness your vhd file (represented as a hard disk)

image

image

13) Select this second hard disk and run the usual installation process

image

image

14) You now have a dual boot system and are good to go

WP_20150321_21_29_38_Pro

 

Technorati Tags:

UnitTesting – not all arrays are created equal

Attempting to compare 2 arrays today that indeed was supposed to be containing the exact same values using the Microsoft built-in Unit testing framework (Microsoft.VisualStudio.TestTools.UnitTesting), I was greatly surprised to learn that neither Assert.Equal nor Assert.AreSame does work for arrays?

It turns out that an entirely different Assert object is to be used for that purpose!
The CollectionAssert.AreEqual(expected, actual) is what you want to use for array comparison as seen below.

    //clone object
var newDisp = disp.CloneWithoutContentData();
Assert.IsNotNull(newDisp);
Assert.IsNotNull(newDisp.Content);

CollectionAssert.AreEqual(new byte[0], newDisp.Content.Data);
CollectionAssert.AreEqual(new byte[0], newDisp.AttachmentList[0].Content.Data);

Well – you learn every day (luckily!)


Technorati Tags: ,

24 November, 2014

Visual Studio: where has my Intellisense gone?

A life without Intellisense is a heavy one. Growing used to relying on Intellisense when programming in Visual Studio – life is difficult when it suddenly decides to stop working.

Luckily, I found a way around this. Basically, it’s just a reset of VS settings which actually also fixes the missing Intellisense.

  • Tools
  • Import and Export settings…
  • reset all settings
  • DONE
Technorati Tags:

26 July, 2014

FIX: Nokia 930 and faulty zoom?

Man, having bought a crispy new phone from my preferred manufacturer I was all excited. That excitement lasted only for so long as I quickly learned of the troublesome pinch/zoom functionality of the screen. Hell – my old Nokia 925 was way better. This one responded instantly in contrast to the case with my brand new Nokia 930!

What is the problem? Well – who should have known that this particular phone comes with a setting that makes the screen quite unresponsive? Once you know and turn that off – your phone works the way it should work, namely instantly!

TURN OFF THE SCREEN MAGNIFIER!

wp_ss_20140726_0001

24 July, 2014

Install an assembly to GAC on Win2012

Man, things are never static!

One used to be able to just drag/drop an assembly into the assembly gac to have it installed. Say hello to Windows Server 2012 and this is no longer an option? So without having to install all sorts of development tools or other stuff – you can use PowerShell to perform this action. I can’t think of any other way of doing it actually.

1. Open a PowerShell command prompt and enter the following
(note that your lines are the $publish.GacInstall(“<full path to my assembly>”))

image

2. Run this from an elevated admin PowerShell console

3. Done.