0

私のモバイル Web サイトでは、ユーザーが Facebook の友達に AppRequest を送信できます。これは機能しています。

友人が AppRequest を受け入れると、Facebook は友人を私の Web サイトに送信します。これも機能しています。

私の Web サイトは ASP.Net MVC 4 アプリケーションです。着信 AppRequest の受け入れをルートに認識させようとしていますが、その方法がわかりません。

Facebook は、次の URL を使用して友達を私のサイトに送信しています。

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

ルートをカスタムコントローラーとアクションにマップしようとしても、これは 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と theはref、クエリ文字列パラメーターとして渡されます。それらはルートの一部ではありません。したがって、それがカスタム ルートに一致するとは期待できません。リクエストが次のように見える場合は、そうでした。codefb_source{ref}/{code}/{fb_source}

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

実際のルートは次のようになっているため (クエリ文字列パラメーターは忘れてください。ルーティングには使用されません)。

http://www.example.com/

基本的にここにあるのは次の URL だけ/です。したがって、ここで期待できる最善の方法は、目的のコントローラーにルーティングされるようにデフォルト ルートを変更することです。

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

ここで最初のルートを取り除きます - それは必要ありません。

于 2013-01-14T22:01:55.973 に答える