2013-07-24 2 views
3

Facebook 알림 API를 설정하려고합니다. RealtimeUpdate()가있는 APi 컨트롤러가 있습니다. Get, 끝점 확인에만 사용됩니다. FB 문서에 기록되면.NET MVC API - get 요청에서 점 (마침표)

:

첫째, 페이스 북 서버를 추가하거나 구독을 수정하려고 할 때 하나의 HTTP가 콜백 URL에 GET 할 것입니다.

  • hub.mode을 - "가입"문자열은이 매개 변수에
  • hub.challenge를 전달 - 임의의 문자열을
  • 허브 : 쿼리 문자열은 다음 매개 변수를 사용하여 콜백 URL에 추가 합니다 .verify_token - 당신이 구독 여기에서

을 만들 때 지정한 verify_token 값이 나는 문제가 - 나는 쿼리 PARAMS 이름에서이 점을 처리하는 방법을 모른다. 나는 많은 구글, 그리고 해결책을 찾지 못했습니다.

누군가이 허브에서 데이터를 가져 오는 방법을 알려주십시오. * 값?

감사합니다.

답변

9

업데이트 :

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

매개 변수가 지정된 이름을 사용하여 쿼리 문자열에서 바인딩됩니다.

+0

마법처럼 작동 :) 감사합니다! –

+0

신난다, 당신이 이것을 할 수 있었다라는 것을 모르고 있었다! – Haney

+0

감사합니다. 그것은 효과가 있었다. – Prakash

0

모델 바인더에는 불법 문자가 있으며 그 중 '.'이 (가) 있습니다. 특수 문자로 주로 복잡한 객체를 바인딩하는 데 사용됩니다. 다른 모든 방법이 실패하면 ASP.NET WebForms와 마찬가지로 Request.QueryString과 Request.Form을 직접 볼 수 있습니다.

하위 등록 정보 mode, challenge 및 verify_token을 가진 hub라는 속성이있는 복합 개체를 사용해 볼 수도 있습니다. 이것은 단지 트릭을 할 수 있습니다. FromUri를 사용하여 메소드 서명은 다음과 같이 속성

+0

모델 바인더 :(및 요청 작동하지 .QueryString 또는 .Form 또한 작동하지 않습니다. ApiController (내 컨트롤러를 상속받습니다)에서 Request라는 속성이 있고 .QuerySting 메서드가 포함되어 있지 않습니다. –

+0

이 컨트롤러를 비 API 컨트롤러로 설정하는 것이 좋습니다. 아니면 사용자 지정 모델 바인더 사용 – Haney

+0

참조 : http://www.codeproject.com/Articles/605595/ASP-NET-MVC-Custom-Model-Binder – Haney

0

약간 다른 형태의 스티브 대답입니다. (당신이 Controller 오히려 그쪽 ApiController에서 상속하는 경우) 경우

당신은 API를 하나 대신 일반 컨트롤러가 필요 추적은 나를 위해 일한 :

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

     } 
    } 
관련 문제