Score:1

IIS ARR 3.0 - เปลี่ยน Base Url ในเนื้อหาการตอบสนองของ Web API โดยใช้ Url Rewrite

ธง vn

ฉันมีเซิร์ฟเวอร์ IIS ในเครื่องที่โฮสต์ Asp.net Core 3.1 web API ทำงานที่พอร์ต 5000 การใช้ wireguard เซิร์ฟเวอร์ภายในเชื่อมต่อกับเซิร์ฟเวอร์สาธารณะ เซิร์ฟเวอร์สาธารณะยังมี IIS 10 ที่เปิดใช้งาน ARR3.0 & สร้างไซต์เป็น https://api.example.com. การใช้ IIS เป็น reverse proxy API ในเครื่องถูกเปิดเผย & ถูกใช้งานโดยแอพมือถือ

กฎการเขียน Url Rewrite ต่อไปนี้เขียนขึ้นใน web.config:-

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://192.168.2.79:5000/{R:1}" />
                </rule>
            </rules>
            <outboundRules>
                <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1" enabled="true">
                    <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^http(s)?://192.168.2.79:5000/(.*)" />
                    <action type="Rewrite" value="http{R:1}://api.example.com/{R:2}" />
                </rule>
                <preConditions>
                    <preCondition name="ResponseIsHtml1">
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern=".*/.*" />
                    </preCondition>
                </preConditions>
            </outboundRules>
        </rewrite>
    </system.webServer>
</configuration>

API ทำงานได้ดี & ส่งคืนการตอบสนองทั้งหมด ปัญหาเกิดขึ้นเมื่อการตอบสนองของ API ส่งคืน Image Url ที่สร้างขึ้นแบบไดนามิกซึ่งถูกต้องหากปรับใช้โดยตรงบนเซิร์ฟเวอร์ แต่ด้านหลัง Reverse Proxy จะส่งคืน URL ในเครื่องซึ่งไม่ถูกต้อง ฉันต้องการเขียน Base Url ใหม่ในเนื้อหาการตอบสนองของ API ฉันจะทำอย่างนั้นได้อย่างไร

ทดสอบการเรียก API จาก Swagger Docs

รหัสสำหรับการสร้าง URL รูปภาพแบบไดนามิก:- รหัสสำหรับการสร้าง URL รูปภาพแบบไดนามิก

โปรดแจ้งให้เราทราบ ฉันจะเขียน URL พื้นฐานใหม่ภายในเนื้อหาการตอบสนองของ API ได้อย่างไร

Lex Li avatar
vn flag
มันเป็นคำถามการเขียนโปรแกรมล้วนๆ ขอให้นักพัฒนาเรียนรู้วิธีใช้ชื่อโฮสต์ดั้งเดิมอย่างเหมาะสม ไม่ใช่ชื่อหลังจากเขียนใหม่ https://stackoverflow.com/a/53220168/11182
AbhiAbzs avatar
vn flag
ไม่ใช่เลย มันเป็นงานของ IT & OP ที่นี่มีคนอื่นถามคำถามที่คล้ายกัน แต่ไม่ได้ผลสำหรับฉันด้วยการแก้ไขที่จำเป็น: https://serverfault.com/questions/508982/using-url-rewrite-to-change-part-of-url
AbhiAbzs avatar
vn flag
นอกจากนี้หากเราสามารถเขียนเนื้อหา html ใหม่ ฯลฯ ภายในการตอบสนอง เหตุใดจึงไม่ตอบสนอง API https://techcommunity.microsoft.com/t5/iis-support-blog/iis-and-url-rewrite-rewriting-the-outbound-response-contents/ba-p/846351
Lex Li avatar
vn flag
จากมุมมองของ IT&OP ทุกฟังก์ชัน/ฟีเจอร์มีขีดจำกัด และน่าเสียดายที่ตอนนี้คุณเห็นขีดจำกัดของกฎขาออก ซึ่งออกแบบมาเพื่อเขียนแท็ก HTML แบบง่ายเท่านั้น (เธรด ServerFault อื่น) แต่ไม่ใช่การตอบสนอง JSON (กรณีของคุณ) "ทำไมจะไม่ล่ะ"? เพราะนั่นเป็นความรับผิดชอบของนักพัฒนาจริงๆ
AbhiAbzs avatar
vn flag
ฉันยอมรับว่าเป็นไปไม่ได้ IIS สามารถเขียนซ้ำในการตอบสนอง html ในกรณีของแท็กบางแท็ก แต่ไม่ใช่ในกรณีอื่น ขอบคุณสำหรับคำแนะนำของคุณ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา