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

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

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

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

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

egmofgnx

egmofgnx1#

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

<system.webserver>

<vailDATION VAIFDAINTEINTEGRATEMODECONFIGUTION = "FALSE" /> /> />

<modules runallManagerModulesforlaterequest = "true" />

...

<add name = "extensionleshandler-integrated-4.0" path = "*" verb = "*" ... />

</System.webserver>

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

<system.webServer> 
<!--The following configuration is to enable IIS7+ to support the Put/Delete method--> 
<httpProtocol> 
<customHeaders> 
<add name="Access-Control-Allow-Origin" value="*" /> 
<add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" /> 
<add name="Access-Control-Allow-Headers" value="Content-Type" /> 
</ customHeaders> 
</httpProtocol> 
<!--This configuration must be added on IIS7/7.5, otherwise an access error will be reported--> 
<modules runAllManagedModulesForAllRequests="true"> 
<remove name="WebDAVModule" /> 
</modules> 
<validation validateIntegratedModeConfiguration= "false" /> 
<handlers> 
<remove name="WebDAV" /> 
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
<remove name=" ExtensionlessUrlHandler-Integrated-4.0" /> 
<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" /> 
< 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" /> 
<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" /> 
</handlers>

<!--Increase the upper limit of GET URL length limit--> <security> 
<requestFiltering> <requestLimits maxUrl="409600" maxQueryString="204800" /> 
</requestFiltering> </security>

</system.webServer>


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

相关问题