0

我的移动网站允许用户向他们的 Facebook 朋友发送 AppRequest。这是有效的。

当朋友接受 AppRequest 时,Facebook 将朋友发送到我的网站。这也有效。

我的网站是一个 ASP.Net MVC 4 应用程序。我试图让我的路线识别传入的 AppRequest 接受,但我不知道该怎么做。

Facebook 正在使用此 URL 将朋友发送到我的网站:

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

尽管我尝试将路由映射到自定义控制器和操作,但这仍然被路由到 Home/Index。这是我到目前为止所做的但未能奏效的事情:

注册路线:

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 }
);

控制器:

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();
   }
4

1 回答 1

1

the和 theref作为查询字符串参数传递。它们不是路线的一部分。因此,您不可能期望这会与您的自定义路线相匹配。如果请求看起来像这样,情况就会如此:codefb_source{ref}/{code}/{fb_source}

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

由于实际路由看起来像这样(忘记查询字符串参数 - 它们不用于路由):

http://www.example.com/

您在这里所拥有的基本上就是以下网址/。因此,您希望在这里最好的方法是修改您的默认路由,使其路由到所需的控制器:

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

现在摆脱第一条路线 - 没有必要。

于 2013-01-14T22:01:55.973 回答