2017-02-07 96 views
0

我在表單上使用Google ReCaptcha元素。 ReCaptcha向控制器需要檢索的名爲g-recaptcha-response的已發佈參數添加一個參數。由於此參數名稱不是合法的C#變量名稱,似乎檢索其值的唯一方法是通過Request.Params["g-recaptcha-response"](而不是通過模型綁定視圖模型中的屬性)。綁定到不是合法的C#變量名稱的名稱

現在,我的問題是,在POSTed參數的其他地方我有幾個表單域可能包含HTML標記。我已使用[AllowHtml]註解了我的視圖模型中的關聯屬性,如果用戶將HTML標記輸入到表單中,則可防止模型聯編程序拋出HttpRequestValidationException。但[AllowHtml]顯然只適用於模型綁定器。如果用戶在表單中輸入了HTML標記,那麼當我參考Request.Params來獲取ReCaptcha響應時,我會得到一個HttpRequestValidationException

就我所知,唯一可以獲取ReCaptcha響應,同時仍允許在選定的POST參數中使用HTML標記的方法是使用編寫自定義模型聯編程序(例如https://stackoverflow.com/a/4316327/1637105)的痛苦讓我將我的視圖模型中的屬性綁定到別名(在我的情況下,屬性名稱不是有效的C#變量名稱)。

這個問題的關鍵是隻是爲了確認,我真的需要去實現自定義模型綁定的痛苦。

任何建議或替代解決方案都是值得歡迎的!

編輯:

它發生,我認爲另一個解決辦法是找出一種方法來從張貼的參數的值,而不會觸發(或同時處理)的HttpRequestValidationException。

回答

1

您可以使用Request訪問值Unvalidated財產,而不會觸發請求驗證。例如

var captcha = Request.Unvalidated.Form["g-recaptcha-response"];