Visual Studio IIS上的Web应用程序不会尝试运行外部API

waxmsbnn  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(259)

让我解释一下我们在做什么。我们有一个API,它为我们的Web应用程序做了很多事情。其中一个调用是更新数据,为此我们需要调用外部API。作为一个测试平台,我们只是确保外部API在Web应用程序中被调用。这在本地工作,但一旦我把它放在IIS上,它就停止工作了。有人能给我指出正确的方向吗?调用外部API的例程也将位于API本身中,而API将位于IIS上。
下面是我们如何调用外部API:

  1. HttpClient client = new HttpClient();
  2. HttpResponseMessage response = await client.SendAsync(request);
  3. var body = response.Content.ReadAsStringAsync();

字符串
显然,请求是由头部和内容组成的,因为我们正在为它提供信息,如URL和此特定调用所需的其他内容,再次,如果我们在本地运行它,一切都很好,即使我们向它发送了错误的信息,我们至少可以看到它尝试了调用。(因为它是在自己的类中,在另一个项目中所以是一个dll)是在IIS上它甚至不尝试调用API。
任何帮助感激不尽。

egmofgnx

egmofgnx1#

API在本地环境下可以正常使用,但在IIS环境下无法调用。如果调用API时没有报错,但API没有响应,可以尝试在web.config中配置:

  1. <system.webserver>
  2. <vailDATION VAIFDAINTEINTEGRATEMODECONFIGUTION = "FALSE" /> /> />
  3. <modules runallManagerModulesforlaterequest = "true" />
  4. ...
  5. <add name = "extensionleshandler-integrated-4.0" path = "*" verb = "*" ... />
  6. </System.webserver>

字符串
另外,因为你的API可以同时更新数据,所以默认的更新和删除都是不安全的,因为不安全。想象一下,用户可以删除或者更新数据,但是一次请求删除或者更新服务器的所有数据是不合理的,但是你可以通过简单的配置来接收更新删除的请求,如下图:

  1. <system.webServer>
  2. <!--The following configuration is to enable IIS7+ to support the Put/Delete method-->
  3. <httpProtocol>
  4. <customHeaders>
  5. <add name="Access-Control-Allow-Origin" value="*" />
  6. <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
  7. <add name="Access-Control-Allow-Headers" value="Content-Type" />
  8. </ customHeaders>
  9. </httpProtocol>
  10. <!--This configuration must be added on IIS7/7.5, otherwise an access error will be reported-->
  11. <modules runAllManagedModulesForAllRequests="true">
  12. <remove name="WebDAVModule" />
  13. </modules>
  14. <validation validateIntegratedModeConfiguration= "false" />
  15. <handlers>
  16. <remove name="WebDAV" />
  17. <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  18. <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  19. <remove name=" ExtensionlessUrlHandler-Integrated-4.0" />
  20. <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" resourceType="Unspecified" requireAccess="Script" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  21. < add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" resourceType="Unspecified" requireAccess="Script" modules="IsapiModule " scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  22. <add name="ExtensionlessUrlHandler-Integrated-4.0 " path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" resourceType="Unspecified" requireAccess="Script" type="System.Web.Handlers.TransferRequestHandler" preCondition=" integratedMode,runtimeVersionv4.0" />
  23. </handlers>
  24. <!--Increase the upper limit of GET URL length limit--> <security>
  25. <requestFiltering> <requestLimits maxUrl="409600" maxQueryString="204800" />
  26. </requestFiltering> </security>
  27. </system.webServer>


当然,在IIS环境下是无法调用API的,可能是因为IIS账号权限的问题,可以在IIS中重新输入Administrator账号密码,重新启动应用解决方案。
如果上述方法仍然不起作用,请让我知道

展开查看全部

相关问题