จะกำหนดค่า IIS สำหรับ SVG และการทดสอบเว็บด้วย Visual Studio ได้อย่างไร


14

สมมติว่าฉันมีหน้าเว็บที่เรียบง่ายพร้อมภาพ svg:

<img src="foobar.svg" alt="not working" />

ถ้าฉันทำหน้านี้เป็นหน้า html คงที่และดูมันโดยตรง svg จะปรากฏขึ้น ถ้าฉันพิมพ์ที่อยู่ของ svg นี้ - มันจะปรากฏขึ้น

แต่เมื่อฉันทำสิ่งนี้เป็นหน้า. aspx และเปิดมันแบบไดนามิกจาก Visual Studio ฉันได้รับaltข้อความ ถ้าฉันพิมพ์ที่อยู่ของ svg นี้ (จาก localhost ไม่ใช่ไฟล์ในเครื่อง) - เบราว์เซอร์พยายามดาวน์โหลดแทนที่จะแสดง

ฉันได้กำหนดชนิด mime ใน IIS (สำหรับเซิร์ฟเวอร์ทั้งหมด - "image / svg + xml") และเริ่ม IIS ใหม่ ผลเช่นเดิม

คำถาม:ฉันควรทำอะไรมากกว่านี้

ปรับปรุง

WireShark จะไม่ทำงาน (มันอยู่ในเอกสารประกอบ) ฉันลองใช้ RawCap ด้วย แต่ก็ไม่สามารถติดตามการเชื่อมต่อของฉันได้ (แปลก) โชคดีที่ Fiddler ทำงาน:

จากลูกค้า:

GET http://127.0.0.1:1731/svg/document_edit.svg HTTP/1.1
Host: 127.0.0.1:1731
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:10.0.1) Gecko/20100101 Firefox/10.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive

คำตอบจากเซิร์ฟเวอร์:

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Thu, 16 Feb 2012 11:14:38 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: private
Content-Type: application/octet-stream
Content-Length: 87924
Connection: Close

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
   xmlns:

*** FIDDLER: RawDisplay truncated at 128 characters. Right-click to disable truncation. ***

สำหรับบันทึกนี่เป็นคำถามถามตอบที่เป็นประโยชน์สำหรับนักเล่นไวโอลิน: /programming/826134/how-to-display-localhost-traffic-in-fiddler-while-debugging-an-asp-net-applicati


คิดว่าคุณอาจได้คำตอบที่ดีกว่าสำหรับเรื่องนี้ กล่าวโดยสรุปคือสมมติว่า ASPX ใช้งานได้แล้วคุณต้องปล่อย SVG เป็นประเภท MIME จากหน้า ASPX เพื่อให้เบราว์เซอร์เชื่อว่าเป็นไฟล์ SVG คุณน่าจะลองปล่อย SVG แบบไดนามิกจากหน้า? ถ้าเป็นเช่นนั้น AFAIK จะทำงานเป็นหน้าเดียวมันจะทำงานในรายการ IMG
TristanK

@TristanK, aspx ไม่ได้เปล่ง "SVG เป็น MIME type" แต่มันมี<img src...ดังที่แสดงไว้ด้านบน aspx คือ "แปล" เป็นหน้า html แบบเต็ม แต่การส่งเนื้อหาทั้งหมด (html และ svg) นั้นทำโดย IIS
greenoldman

ฉันยังไม่เข้าใจสิ่งที่คุณกำลังอธิบาย แต่ฉันคิดว่านี่เป็นคำถามเพื่อการพัฒนาดังนั้นจะดีกว่าเมื่อถามถึง StackOverflow
TristanK

2
หยิบสำเนาของพู้ทำเล่นจากนั้นติดตามคำขอที่แตกต่างกันสองรายการ นั่นอาจให้เบาะแสบางอย่างแก่คุณว่าทำไมคำขอโดยตรงสำหรับรูปภาพจึงมีพฤติกรรมแตกต่างกันในแต่ละกรณี เบาะแสส่วนใหญ่น่าจะเป็นในส่วนหัวกลับมา หากไม่มีข้อมูลนี้เราสามารถทำได้ แต่คาดเดาว่าเซิร์ฟเวอร์ของคุณตอบกลับมาอย่างไร
Kev

@macias อย่างที่ Kev พูดคุณต้องติดตามการจราจร พู้ทำเล่นหรือ Wireshark เก่าธรรมดาควรจะรับมันได้
Chris S

คำตอบ:


14

จากการติดตาม Fiddler ของคุณดูเหมือนว่าคุณกำลังให้บริการหน้าเว็บของคุณโดยใช้เว็บเซิร์ฟเวอร์ในตัว Visual Studio:

Server: ASP.NET Development Server/10.0.0.0

ถ้านี่คือการให้บริการโดย IIS7 เราจะเห็นว่า:

Server: Microsoft-IIS/7.5

เว็บเซิร์ฟเวอร์ในตัว Visual Studio มีชุด mime-type ที่ จำกัด เท่านั้นที่สามารถให้บริการและไม่มีความรู้เกี่ยวกับประเภท mime ที่คุณตั้งค่าสำหรับ IIS7 ฉันเขียนคำตอบของปัญหาที่คล้ายกันใน Stack Overflow มาระยะหนึ่งแล้ว:

การตั้งค่าชนิด MIME โดยใช้ ASP.NET Development Server

เซิร์ฟเวอร์ในตัวกำลังให้บริการ.svgไฟล์ของคุณดังนี้:

Content-Type: application/octet-stream

นี่อาจเป็นสาเหตุที่ทำให้เบราว์เซอร์แจ้งให้ดาวน์โหลด

ใน Visual Studio ตรวจสอบว่าคุณใช้ IIS Express โดยเปิดคุณสมบัติโครงการของไซต์และเลือกแท็บ "เว็บ" จากรายการแท็บแนวตั้ง:

ป้อนคำอธิบายรูปภาพที่นี่

หากคุณไม่มี IIS 7.5 Express ติดตั้งคุณสามารถรับได้จากที่นี่:

http://www.microsoft.com/download/en/details.aspx?id=1038

คุณจะต้องใช้ Visual Studio 2010 Service Pack 1 เพื่อใช้ประโยชน์อย่างเต็มที่:

http://support.microsoft.com/kb/983509

รองรับ IIS Express

visual Studio 2010 SP1 ช่วยให้คุณสามารถใช้ Internet Information Services (IIS) 7.5 Express เป็นเซิร์ฟเวอร์การโฮสต์ภายในสำหรับเว็บไซต์และโครงการแอปพลิเคชันเว็บ

หมายเหตุ IIS 7.5 Express ไม่รวมอยู่ใน SP1 และคุณต้องดาวน์โหลดแยกต่างหาก สำหรับข้อมูลเพิ่มเติมโปรดเยี่ยมชมบล็อกต่อไปนี้: http://weblogs.asp.net/scottgu/archive/2011/01/03/vs-2010-sp1-beta-and-iis-developer-express.aspx

เมื่อคุณทำเสร็จแล้วคุณสามารถเพิ่ม.svgประเภท mime ในweb.configไฟล์แอปพลิเคชันของคุณ:

<configuration>
   <system.webServer>
      <staticContent>
         <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
      </staticContent>
   </system.webServer>
</configuration>

ขอบคุณมาก. ในกรณีของฉันมันค่อนข้างแตกต่าง - เปลี่ยนเป็น IIS (ฉันมี ISS ไม่ใช่ ISSExpress) ฉันต้องรัน VS ในโหมดผู้ดูแลระบบหลังจากนั้นทุกอย่าง - ฉันไม่ได้กำหนด svg ใน web.config เพราะฉันกำหนด มันมีอยู่แล้วใน IIS
greenoldman

2

ดังกล่าวข้างต้น Cassini ละเว้นการตั้งค่าเหล่านี้ใน web.config ดังนั้นจึงต้องใช้ IIS Express แทน (ที่การตั้งค่าโครงการ VS) /programming/5924647/setting-mime-types-using-the-asp- สุทธิพัฒนาเซิร์ฟเวอร์

ในการรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีกำหนดค่าประเภท MIME โดยใช้ UI ของผู้ดูแลระบบหรือใช้ web.config สำหรับ IIS หรือ IIS Express โปรดดูที่: http://4rapiddev.com/tips-and-tricks/add-mime-type-flv-mp4-4 ใน -iis-for-a-website-or-global / และ http://4rapiddev.com/tips-and-tricks/add-mime-type-flv-mp4-to-web-config-in-iis-7 /


คุณกำลังถามคำถามนี้เป็นคำถามใหม่หรือวาทศิลป์? หากอดีตโปรดถามคำถามใหม่พร้อมรายละเอียดทั้งหมด ถ้าอย่างหลังนี่น่าจะเป็นความเห็น - เพราะมันเป็นคำตอบที่แย่มาก ( ดูที่นี่เพื่อดูว่าทำไม )
voretaq7

แก้ไขด้วยลิงก์ที่ดีกว่า
George Birbilis

ดีกว่ามาก :-)
voretaq7

2

ฉันใช้คำตอบของ Kev โดย:

  1. การติดตั้ง IIS 8.0 Express จากWeb Platform Installer
  2. การเปลี่ยนคุณสมบัติของโครงการเพื่อใช้ IIS Express และสร้างไดเรกทอรีเสมือนสำหรับมัน
  3. การเพิ่มการกำหนดค่าของ→ system.webServerใน web.config
<staticContent>
    <remove fileExtension=".svg" />
    <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
</staticContent>

2

วิธีแก้ปัญหาของฉันสำหรับการนี้คือการสร้าง httphandler ของฉันเองในเครื่องซึ่งเขียนทับ content-type สำหรับ svg

public class SvgHandler : IHttpHandler
{

    public bool IsReusable
    {
        get { return false; }
    }

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "image/svg+xml";
        context.Response.BinaryWrite(File.ReadAllBytes(context.Request.PhysicalPath));
        context.Response.End();
    }
}

และใน web.config ฉันเพิ่ม:

<httpHandlers>
  <add verb="*" path="*.svg" type="SvgHandler" />
</httpHandlers>

ด้วยโซลูชันนี้คุณไม่ต้องใช้ IIS express คุณสามารถใช้เซิร์ฟเวอร์การพัฒนาทั่วไปใน visual Studio 2010


1
มันค่อนข้างแย่ที่เรื่องแบบนี้จะต้องเกิดขึ้น ...
Jarrod Mosen

1

ฉันใช้ IIS7 และสามารถแก้ไขได้โดยคลิกขวาที่เซิร์ฟเวอร์ใน IIS และเลือกคุณสมบัติ จากนั้นฉันคลิกที่ปุ่มประเภท MIME ... ฉันคลิกใหม่แล้ว สำหรับส่วนขยายที่ฉันพิมพ์ด้วย. svg สำหรับประเภท MIME ที่ฉันพิมพ์ในรูปภาพ / svg + xml ฉันบันทึกแล้วทั้งหมดและทำ iisreset จากพรอมต์คำสั่ง ใช้งานได้ดีมาก


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.