Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

.NET MVC API - dots (period) in get request

I'm trying to setup Facebook Notification API. I have an APi Controller with RealtimeUpdate() - Get, will be used just for verification of endpoint.

As is written in Fb Docs:

Firstly, Facebook servers will make a single HTTP GET to your callback URL when you try to add or modify a subscription. A query string will be appended to your callback URL with the following parameters:

  • hub.mode - The string "subscribe" is passed in this parameter
  • hub.challenge - A random string
  • hub.verify_token - The verify_token value you specified when you created the subscription

From here I have a problem - I have no idea how to handle this dots in query params names. I google a lot, and did not find the solution.

Can somebody please say to me how to get data from this hub.* values?

Thank you!

like image 906
Evgeniy Labunskiy Avatar asked Dec 04 '22 10:12

Evgeniy Labunskiy


2 Answers

Update your method signature using the FromUri attributes, like this:

public string Get(
    [FromUri(Name="hub.mode")]string mode,
    [FromUri(Name="hub.challenge")]string challenge,
    [FromUri(Name="hub.verify_token")]string verifyToken
    )
{
    /* method body */
}

The parameters will be bound from the query string using the specified names.

like image 148
Steve Ruble Avatar answered Dec 18 '22 12:12

Steve Ruble


Slightly different form Steve's answer.

In case you need to have a normal controller instead of an Api one (if you are inheriting from Controller rather tha ApiController), the follow worked for me:

 namespace Name
    {
            public class Hub
        {
            public string Mode { get; set; }

            public string Challenge { get; set; }

            // ReSharper disable once InconsistentNaming
            public string Verify_Token { get; set; }
        }

        public class FacebookWebHooksController : Controller
        {
            [System.Web.Http.HttpGet, ActionName("Callback")]
            [AllowAnonymous]
            public ContentResult CallbackGet(Hub hub)
            {
                if (hub.Mode == "subscribe" && hub.Verify_Token == "YOUR_TOKEN")
                    return Content(hub.Challenge, "text/plain", Encoding.UTF8);

                return Content(string.Empty, "text/plain", Encoding.UTF8);
            }
        }

        [HttpPost]
        [AllowAnonymous]
        public ActionResult Callback()
        {
            Request.InputStream.Seek(0, SeekOrigin.Begin);
            var jsonData = new StreamReader(Request.InputStream).ReadToEnd();

        }
    }
like image 44
Reuel Ribeiro Avatar answered Dec 18 '22 12:12

Reuel Ribeiro