【问题标题】:How to call Fetch post API to ASP.NET generic handler in react?如何在反应中调用 Fetch post API 到 ASP.NET 通用处理程序?
【发布时间】:2019-11-30 15:13:57
【问题描述】:

我正在将 ReactJS 与 ASP.NET Web 窗体一起使用,在自动完成组件的 onChange 中,调用了一个通用处理程序来更新数据源。

所以在 Autocomplete 组件的 onChange 中使用了 fetch API post call,奇怪的是有时我确实得到了响应,有时 fetch API 被阻止,如 chrome 开发人员工具中所见。在服务器端也应用了所有 CORS 标头,但不明白为什么它只是有时会失败。

错误

index.js:39 POST http://localhost:53107/INV/MKRF/Handlers/Handler.ashx net::ERR_BLOCKED_BY_CLIENT

索引.js

class App extends React.Component {

constructor(props) {
    super(props);
    this.state = {
        itemcodes: [],
        selected: null,
        qty: '',
        rows: []
    };


}


handlechange = (e) => {
    //console.log(e);
    this.setState({
        selected: e.value
    });

    var data = new URLSearchParams();
    data.append("method", "GetAllBAANItemCodes");
    data.append("prefix", this.state.selected);
    fetch('Handlers/Handler.ashx', {
        method: 'POST',
        headers: {
            Accept: "application/json",              
            "Content-Type": "application/x-www-form-urlencoded",
            "Access-Control-Request-Headers": "*",
            "Access-Control-Request-Method": "*"
            //'X-Requested-With': 'XMLHttpRequest'
        },
        credentials: "include",
        body: data
    }).then((response) => { response.json(); })
        .then((data) => { this.setState({ itemcodes: data }); })
        .catch(
            (error) => console.log(error)
        );

}



render() {
    return (
                    <Autocomplete
                        dataSource={this.state.itemcodes}
                        value={this.state.selected}
                        onValueChanged={(e) => this.handlechange(e)}
                        placeholder={'Type first name...'}
                    />


    );
}

}

处理代码

Public Class Handler : Implements IHttpHandler

Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
    Dim method As String = context.Request("method")
    If method = "GetAllBAANItemCodes" Then
        Dim prefix As String = context.Request("prefix")
        Dim conBAAN As New SqlClient.SqlConnection
        conBAAN.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings("BAAN").ConnectionString
        conBAAN.Open()
        Dim itemCodes As New List(Of String)
        Dim cmdBAAN As New SqlClient.SqlCommand
        cmdBAAN.Connection = conBAAN
        cmdBAAN.Connection = conBAAN
        cmdBAAN.CommandType = CommandType.Text
        cmdBAAN.CommandText = <some query>
        cmdBAAN.Parameters.AddWithValue("@SearchText", prefix)
        Dim rdr As SqlDataReader = cmdBAAN.ExecuteReader
        If rdr.HasRows Then
            While rdr.Read
                itemCodes.Add(rdr("t_item").ToString())
            End While
        End If

        rdr.Close()
        cmdBAAN.Dispose()
        conBAAN.Close()

        Dim js As New JavaScriptSerializer()
        context.Response.ContentType = "application/json"
        context.Response.Headers.Add("Access-Control-Allow-Origin", "*")
        context.Response.Headers.Add("Access-Control-Allow-Methods", "*")
        context.Response.Write(JsonConvert.SerializeObject(itemCodes))

【问题讨论】:

  • ERR_BLOCKED_BY_CLIENT 几乎总是意味着您有一些阻止请求的广告屏蔽扩展程序或隐私扩展程序。因此,请尝试关闭您的扩展程序,或在其他浏览器中尝试

标签: asp.net reactjs post webforms fetch-api


【解决方案1】:

是的,正如@sideshowbarker 所建议的那样,浏览器安装了该公司的 ForcePoint 扩展程序,该扩展程序给出了错误。

【讨论】:

    猜你喜欢
    • 2021-02-03
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多