0

Mon site Web pour mobile permet aux utilisateurs d'envoyer une application AppRequest à leurs amis Facebook. Cela fonctionne. Lorsque l'ami accepte AppRequest, Facebook l'envoie sur mon site Web. Cela aussi fonctionne.Routing Facebook AppRequests dans ASP.Net MVC 4

Mon site Web est une application ASP.Net MVC 4. J'essaie d'obtenir que mes routes reconnaissent l'acceptation AppRequest entrante mais je n'arrive pas à comprendre comment le faire.

Facebook envoie les amis sur mon site en utilisant l'adresse suivante:

http://www.example.com/?ref=notif&code=abcdefg&fb_source=notification

Cela permet de se routé vers Accueil/Index malgré mes tentatives pour cartographier la route à un contrôleur personnalisé et d'action . Voici ce que je l'ai fait jusqu'à présent qui n'a pas réussi à travailler:

Routes enregistrés:

routes.MapRoute(
    name: "FacebookAppRequest", 
    url: "{ref}/{code}/{fb_source}", //This should match the URL above 
    defaults: new { controller = "Facebook", action ="FBAppRequestHandler"} 
); 
routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

Controller:

public class FacebookController : Controller 
{ 
    public FacebookController() {} 

    public ActionResult FBAppRequestHandler(
     [Bind(Prefix = "ref")] string fbReferal, 
     [Bind(Prefix = "code")] string fbCode, 
     [Bind(Prefix = "fb_source")] string fbSource) 
    { 
     //Do some stuff with fbReferal, fbCode and fbSource 

     return View(); 
    } 

Répondre

1

Le ref le code et fb_source sont passés en tant que paramètres de chaîne de requête. Ils ne font pas partie de la route. Vous ne pouvez donc pas vous attendre à ce que {ref}/{code}/{fb_source} corresponde à votre itinéraire personnalisé. Cela aurait été le cas si la demande ressemblait à ça:

http://www.example.com/notif/abcdefg/notification 

Depuis la route réelle ressemble à ceci (oublier les paramètres de chaîne de requête - ils ne sont pas utilisés pour le routage):

http://www.example.com/ 

tous que vous avez ici est essentiellement l'URL suivante /. Donc, le meilleur que vous pourriez espérer ici est de modifier votre itinéraire par défaut afin qu'il route vers le contrôleur souhaité:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Facebook", action = "FBAppRequestHandler", id = UrlParameter.Optional } 
); 

maintenant se débarrasser de la première route - ce n'est pas nécessaire.