无法从其他服务器ASP.NET核心调用API

piok6c0g  于 2023-01-14  发布在  .NET
关注(0)|答案(1)|浏览(181)

我在ASP.NET核心项目中有一个API调用,在localhost中一切正常,但在IIS中不正常。我得到的错误是**"连接尝试失败,因为连接方在一段时间后没有正确响应,或建立的连接失败,因为连接的主机没有响应。"**
以下是StackTrace:
System.Net.Http.ConnectHelper.ConnectAsync(字符串主机、Int32端口、取消令牌、取消令牌)。(HttpRequestMessage请求,布尔值允许Http2,取消令牌取消令牌),位于System.Net.Http.HttpConnectionPool.CreateHttp11连接异步(HttpRequestMessage请求,取消令牌取消令牌)在System.Net上。Http.HttpConnectionPool。获取HttpConnectionAsync(HttpRequestMessage请求,取消令牌取消令牌)在System.Net上。Http。HttpConnectionPool。SendWithRetryAsync(HttpRequestMessage请求,布尔值doRequestAuth,取消令牌取消令牌)在System.Net上。Http。重定向处理程序。SendAsync(HttpRequestMessage请求,取消令牌取消令牌),位于系统. Net. Http.诊断处理程序. SendAsync(HttpRequestMessage请求,取消令牌取消令牌)在System.Net上。Http.HttpClient。完成发送异步未缓冲(任务1发送任务,HttpRequestMessage请求,取消令牌源cts,布尔型disposects)在AILS.移动.基础.控制器.实用程序控制器. GetPostRequest [T](字符串url,对象请求数据,布尔型getReq)
下面是调用API的代码:

BaseResponse<T> responseResult = new BaseResponse<T>();
        Type _obj = typeof(T);

        using (var client = new HttpClient())
        {
            try
            {
                UriBuilder builder = new UriBuilder(!url.Contains("handshake") ? GetCookie(ASMobileConstant.CookiesKey.BaseURL) + url : url);
                HttpResponseMessage response = new HttpResponseMessage();
                string content = string.Empty;

                if (getReq)
                {
                    response = await client.GetAsync(builder.Uri, HttpCompletionOption.ResponseHeadersRead);
                    response.EnsureSuccessStatusCode();
                    content = await response.Content.ReadAsStringAsync();
                    response.Dispose();
                }
                else
                {
                    HttpContent httpContent = new StringContent(JsonSerializer.Serialize(requestData), System.Text.Encoding.UTF8, "application/json");
                    response = await client.PostAsync(builder.Uri, httpContent);
                    content = await response.Content.ReadAsStringAsync();
                    response.Dispose();
                }

                if (_obj != typeof(clsResponse))
                {
                    responseResult = new BaseResponse<T>(JsonSerializer.Deserialize<clsResponse>(content));
                }
                else
                {
                    responseResult = JsonSerializer.Deserialize<BaseResponse<T>>(content);
                }
            }
            catch (Exception ex)
            {
                responseResult.IsGood = false;
                responseResult.Message = ex.Message;
                myLogger.Error("catch {0}", ex.Message);
                myLogger.Error("catch {0}", ex.StackTrace);
            }
            finally
            {
                client.Dispose();
            }
        }

假设我的域名是www.example.com,URL将是http://xxx.ask.com/mobileapi/Loginxxx.ask.com, the url will be http://xxx.ask.com/mobileapi/Login
我已经使用 Postman 手动测试,它的工作完美。
我不知道可以设置在哪个设置上,请帮助。
问:HTTPS网站可以调用HTTP API吗?
提前感谢:)

jogvjijk

jogvjijk1#

问:HTTPS网站可以调用HTTP API吗?
浏览器安全性限制网页向提供该网页的域之外的其他域发出请求。此限制称为同源策略。同源策略限制(但不阻止)恶意站点从其他站点阅读敏感数据。若要从浏览器向具有不同来源的终结点发出请求,该终结点必须启用跨来源资源共享(CORS)。
有关详细信息,请参见Enable Cross-Origin Requests (CORS) in ASP.NET Core

相关问题