Angular 4 get函数在http post请求后返回值

标签 angular typescript post recaptcha dataservice

我创建了一个 Controller 方法,在解决 reCaptcha 后将验证码响应发送到 google 服务器,并且请求返回验证码响应 JSON。如果验证码响应为 =="success", Controller 方法返回 true,否则返回 false

请求是通过http POST发送的,但我面临的问题是:在POST请求后收到响应后如何从 Controller 方法获取 bool 值?

Controller 方法:

 {
        if(ModelState.IsValid)
        {
            bool success = false;

            var client = new System.Net.WebClient();

            string PrivateKey = "6LeiumYUAAAAAMS0kU0OYXaDK0BxHO7KJqx2zO7l";

            var GoogleReply = client.DownloadString(string.Format("https://www.google.com/recaptcha/api/siteverify?secret={0}&response={1}", PrivateKey, Model.RecaptchaResponse));

            var captchaResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<ReCaptchaController>(GoogleReply);

            success = captchaResponse.Success.ToLower() == "true" ? true : false;

            return Ok(success);
        }

        return BadRequest();

    }

    [JsonProperty("success")]
    public string Success
    {
        get { return m_Success; }
        set { m_Success = value; }
    }

    private string m_Success;
    [JsonProperty("error-codes")]
    public List<string> ErrorCodes
    {
        get { return m_ErrorCodes; }
        set { m_ErrorCodes = value; }
    }

    private List<string> m_ErrorCodes;
}

DataService 中的 POST 请求:

//Http Post request for server-side reCAPTCHA validation
checkRecaptcha(url: string, data: Object): Observable<boolean> {
    this.timerService.resetTimer();
    return this.http.post(url, JSON.stringify(data), this.sharedService.getRequestHeaders())
        .map((response: Response) => {
            return response.json() as boolean
        })
        .catch((response: Response) => {
            return Observable.throw(response);
        });
}

app.component.ts:

resolved(captchaResponse: string) {
    let data = {
        RecaptchaResponse: captchaResponse
    };
    let result = this.dataService.checkRecaptcha('api/recaptcha/validate', data);
    console.log(result);
}

在 chrome 调试中我得到一个 Observable:http://prntscr.com/ke5eeo

最佳答案

return response.json() as boolean 返回可观察值,而不是您的 checkRecaptcha 函数。您需要监听您自己的 checkRecaptcha 返回的 Observable:

this.dataService.checkRecaptcha('api/recaptcha/validate', data).subscribe(
  (result: boolean) => console.log(result)
);

关于Angular 4 get函数在http post请求后返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51668013/

相关文章:

使用可区分的联合类型时出现 TypeScript 错误

typescript - Visual Studio 2017 | TS2304 : Cannot find name 'unknown'

arrays - typescript :对象数组的valueof字段

django Rest框架无法POST数据

html - 具有可扩展行的 Angular Material 表,在更改选项卡时自动扩展以 stackBlitz 示例

http - Angular 2 HTTP 响应拦截器

javascript - 如何在 Angular 2 beta 的服务中有效地使用 Http 组件?

php - 如何将项目添加到json文件格式的数组

javascript - 如何在 POST 请求中以逗号分隔的列表中的 "escape"逗号?

javascript - angular2 组件中的多个动画触发器