srijeda, 26. lipnja 2013.

ASP.NET MVC4 Facebook application, facebook authorization and form post data

OK - so I've seen this great tutiral on creating Facebook app's with ASP.NET MVC4. I figured - this will be peace of cake - I have a cool idea which I'm about to implement, and just follow this steps and everything should work. However, this is never true. First thing I stumbled upon were simple post-forms. The problem is when one uses FacebookAuthorize attribute on an action or a controller, and attempts a simple post to this page, it simply doesn't work! The problem is further described in this stackoverflow question

Basically, the problem is because for some reason FacebookAuthorize filter makes a redirect to check the identity of an user. It took me at least 2 hours to find a reason for this behaviour - the code is actually available online to see, on this github link. The solution lies in code between lines 50 and 60 - FacebookAuthorize checks if there exists a specific request parameter, named "signed_request", and if it does not exist, the redirect is made and all our post data is lost.

The best solution I could come up is making a simple hidden field inside our form which is named "signed_request" and contains this request. For that purpose, I've made this nice extender method that does the job:


public static class FacebookHelpers
    {
        public static MvcHtmlString RenderAuthorizationToken(this HtmlHelper helper)
        {
            var signedReqValue = helper.ViewContext.RequestContext.HttpContext.Request["signed_request"];

            TagBuilder hdnBilder = new TagBuilder("input");
            hdnBilder.Attributes.Add("type", "hidden");
            hdnBilder.Attributes.Add("name", "signed_request");
            hdnBilder.Attributes.Add("value", signedReqValue);

            return MvcHtmlString.Create(hdnBilder.ToString(TagRenderMode.SelfClosing));
        }
    }
It can be used like this using razor: @Html.RenderAuthorizationToken()
Problem: [solved].

subota, 1. lipnja 2013.

Moving SQL server database files

Lately my VPS server C disk space seems to be filling-up rapidly. So I decided to get some extra space (its risky to append C-disk space, so I agreed to create additional partition) - let's call it E. Since my database .mdf files seem to take too much space, let's try to move them to this new partition.

First, I tried to detach the database, copy it to new location, and try to reattach it. Unfortunately - it doesn't seem to work. Exception was:

Unable to open physical file - Operating system error 5: 5(error not found) Microsoft SQL Server: Error 5120

After few minutes of google-ing, problem appeared to be due to security restrictions. Easiest way (allthough not the most secure) is to share a folder that my .mdf copy is located - unfortunately, it didn't work either - again the same exception.

After a bit more google-ing, found some solutions saying to allow sql express service full control over that specific file. That sounded like a splendid idea, but as a no-system-knowledge programmer, I stumbled upon this - until I checked service properties:


Basically, only thing one needs to do is set file permissions through this super-user-friendly screen:


After this, hitting "ENTER" does the trick:


And whoalla - it worked!