2015-11-10 19 views
2

我想用ReCaptcha將表單發佈到ApiController。如何捕捉ASP.NET ApiController中的g-recaptcha-response?

<form> 
    <label for="name">Name:</label> 
    <input id="name" name="name" ><br/>  
    <label for="email">Email:</label> 
    <input id="email" name="email" type="email" ><br/> 
    <div class="g-recaptcha" data-sitekey="some_site_key"></div> 
    <input type="submit" value="Submit"/> 
</form> 

<script src="https://www.google.com/recaptcha/api.js"></script> 
<script> 
    $(function() { 
     $('form').submit(function (event) { 
      var data = $('form').serialize(); 
      console.log('form data: ', data); 
      $.post("api/test", data, 
       function (data) { 
       alert('success'); 
      }); 
      event.preventDefault(); 
     }); 
    }); 
</script> 

形式的console.log()聲明,我可以看到張貼的價值觀念受到的電子郵件G-reCAPTCHA的響應名。

我想我可以在ApiController視圖模型,就像這樣:

public IHttpActionResult Post(FormModel model) 
{ 
    // automatic model binding to get the posted data. 
} 

public class FormModel 
{ 
    public string Name { get; set; } 
    public string Email { get; set; } 
    public string GRecaptchaResponse { get; set; } 
} 

但顯然沒有綁定g-recaptcha-responseGRecaptchaResponse規則。並且有效的屬性名稱不應包含破折號-

所以問題是,我們如何才能在服務器(ApiController)端收到g-recaptcha-response值?

回答

0

這裏是我發現:

在ApiController:

public async Task Post() 
{ 
    var obj = await Request.Content.ReadAsAsync<JObject>(); 
    var model = obj.ToObject<FormModel>();   
    //... 
} 

對於FormModel,使用[JsonProperty]

public class FormModel 
{ 
    public string Name { get; set; } 
    public string Email { get; set; } 

    [JsonProperty("g-recaptcha-response")] 
    public string GRecaptchaResponse { get; set; } 
}