IIS 中同一网站下的主机前端(react)和后端(ASP.NET Web Api)

Posted

技术标签:

【中文标题】IIS 中同一网站下的主机前端(react)和后端(ASP.NET Web Api)【英文标题】:Host frontend (react) and backend (ASP.NET Web Api) under the same Website in IIS 【发布时间】:2021-05-12 02:11:00 【问题描述】:

我有 2 个应用程序。

我希望前端(反应)在 url 上可用: localhost:5001/ekadry

和后端(c# 中的 web api)在 url 上可用: localhost:5001/ekadryapi

这是它在 IIS 中的样子:

当我访问这些网址时,每个应用程序似乎都在工作。当前端向后端请求某些内容时会出现问题 - 然后我收到错误 405 Method Not Allowed:

当后端和前端作为不同的网站托管在不同的端口上时,不会出现此问题。 谁能给我解释一下?

【问题讨论】:

看看这个如果有帮助 - ***.com/questions/59485621/… 尝试从 iis 中删除 WebDAV 功能。通过取消选中该功能。image 进行更改后重新启动 iis。 这不是 WebDAV 问题,因为我没有它 【参考方案1】:

我认为您必须在 API web.config 中授予对客户端的访问权限

类似下面的标签:

<configuration>
<system.webServer>
   <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*" />
            <add name="Access-Control-Allow-Headers" value="Content-Type, Token, Accept, 
            Accept-Language, Content-Language,X-ATJ-Auth-Token,X-ATJ-Username" />
            <add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" />
        </customHeaders>
   </httpProtocol>
    <handlers>
      .
      .
      .
    </handlers>
  </system.webServer>
</configuration>

【讨论】:

感谢您的回答。我在 web api 中将这些行添加到 web.config 中,但我看不出有什么不同,仍然是同样的错误:(【参考方案2】:

我在 web.config 中添加了这条规则,现在前端可以访问后端。问题解决了。

    <rule name="ReactRouter Routes" stopProcessing="true">
      <match url=".*" />
      <conditions logicalGrouping="MatchAll">
        <add input="REQUEST_FILENAME" matchType="IsFile" negate="true" />
        <add input="REQUEST_URI" pattern="^/ekadryapi(.*)$" negate="true" />
        <add input="REQUEST_FILENAME" matchType="IsDirectory" negate="true" />
      </conditions>
      <action type="Rewrite" url="/index.html" />
    </rule>

【讨论】:

以上是关于IIS 中同一网站下的主机前端(react)和后端(ASP.NET Web Api)的主要内容,如果未能解决你的问题,请参考以下文章

当前端和后端位于虚拟 Docker 网络中时,如何使用 axios 寻址后端主机

如何部署分离的前端和后端?

WebStorm 代码完成 - 前端 (React) 和后端 (Deno)

使用 Django、webpack、reactjs、react-router 解耦前端和后端

AWS CloudFront 为不同的主机(前端和后端)设置 cookie

网站啥的要分前端和后端的?是啥意思?