Làm cách nào để định cấu hình IIS cho SVG và kiểm tra web với Visual Studio?


14

Giả sử tôi có một trang web đơn giản với hình ảnh svg trong đó:

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

Nếu tôi tạo trang này dưới dạng trang html tĩnh và xem nó trực tiếp thì Svg được hiển thị. Nếu tôi gõ địa chỉ của svg này - nó sẽ được hiển thị.

Nhưng khi tôi tạo trang này dưới dạng trang .aspx và khởi chạy nó một cách linh hoạt từ Visual Studio, tôi nhận được altvăn bản. Nếu tôi nhập địa chỉ của svg này (từ localhost, không phải là tệp cục bộ) - trình duyệt sẽ cố tải xuống thay vì hiển thị.

Tôi đã xác định loại mime trong IIS (cho toàn bộ máy chủ - "image / svg + xml") và khởi động lại IIS. Hiệu ứng tương tự như trước đây.

Câu hỏi: tôi nên làm gì hơn?

Cập nhật

WireShark sẽ không hoạt động (nó nằm trong tài liệu), tôi cũng đã thử RawCap, nhưng nó không thể theo dõi kết nối của tôi (lẻ), may mắn thay Fiddler đã làm việc:

Từ khách hàng:

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

Trả lời từ máy chủ:

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. ***

Đối với bản ghi, đây là câu hỏi và trả lời hữu ích cho Fiddler: /programming/826134/how-to-display-localhost-traffic-in-fiddler-fter-debugging-an-asp-net-applicati


Hãy nghĩ rằng bạn có thể nhận được câu trả lời tốt hơn cho điều này trên SO. Nói tóm lại, giả sử ASPX đã hoạt động, bạn cần phát ra SVG dưới dạng loại MIME từ trang ASPX để trình duyệt tin rằng đó là tệp SVG. Bạn, có lẽ, đang cố gắng tự động phát ra SVG từ trang? Nếu vậy, AFAIK nếu nó hoạt động như một trang duy nhất, nó sẽ hoạt động trong một mục nhập IMG.
TristanK

@TristanK, aspx không phát ra "SVG là loại MIME", nó chỉ đơn giản chứa <img src...như được hiển thị ở trên, aspx được "dịch" sang trang html đầy đủ, nhưng việc gửi toàn bộ nội dung (html, và sau đó là Svg) được thực hiện bởi IIS.
greenoldman

Tôi vẫn không hiểu những gì bạn mô tả, nhưng tôi nghĩ đây là một câu hỏi phát triển, vì vậy sẽ tốt hơn nếu được hỏi trên StackOverflow.
TristanK

2
Lấy một bản sao của Fiddler sau đó theo dõi hai yêu cầu khác nhau. Điều đó có thể cung cấp cho bạn một số manh mối về lý do tại sao một yêu cầu trực tiếp cho hình ảnh lại hành xử khác nhau trong mỗi trường hợp này. Các manh mối rất có thể sẽ nằm trong các tiêu đề được trả về. Không có dữ liệu này, tất cả những gì chúng ta có thể làm là đoán xem phản hồi của máy chủ của bạn sẽ trả về.
Kev

@macias Như Kev đã nói, bạn sẽ cần theo dõi lưu lượng truy cập. Fiddler hoặc Wireshark cũ đơn giản sẽ có thể nhặt nó lên.
Chris S

Câu trả lời:


14

Từ theo dõi Fiddler của bạn, có vẻ như bạn đang phục vụ các trang của mình bằng máy chủ web Visual Studio tích hợp:

Server: ASP.NET Development Server/10.0.0.0

Nếu điều này được IIS7 phục vụ thì chúng ta sẽ thấy:

Server: Microsoft-IIS/7.5

Máy chủ web Visual Studio tích hợp chỉ có một bộ loại mime giới hạn mà nó có thể phục vụ và không có kiến ​​thức về các loại mime bạn đặt cho IIS7. Tôi đã viết một câu trả lời cho một vấn đề tương tự trên Stack Overflow một lúc trước:

Đặt các loại MIME bằng Máy chủ phát triển ASP.NET

Máy chủ tích hợp đang phục vụ .svgtệp của bạn dưới dạng:

Content-Type: application/octet-stream

Đây có lẽ là những gì khiến trình duyệt nhắc nhở để tải xuống.

Trong Visual Studio kiểm tra xem bạn có đang sử dụng IIS Express bằng cách mở thuộc tính dự án của trang web của bạn và chọn tab "Web" từ danh sách tab dọc:

nhập mô tả hình ảnh ở đây

Nếu bạn chưa cài đặt IIS 7.5 Express, bạn có thể tải xuống từ đây:

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

Bạn sẽ cần Visual Studio 2010 Service Pack 1 để tận dụng tối đa:

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

Hỗ trợ IIS Express

Visual Studio 2010 SP1 cho phép bạn sử dụng Dịch vụ thông tin Internet (IIS) 7.5 Express làm máy chủ lưu trữ cục bộ cho trang web và Dự án ứng dụng web.

Lưu ý IIS 7.5 Express không được bao gồm trong SP1 và bạn phải tải xuống riêng. Để biết thêm thông tin, hãy truy cập blog sau: http://weblogs.asp.net/scottgu/archive/2011/01/03/vs-2010-sp1-beta-and-iis-developer-express.aspx

Khi bạn đã hoàn thành, bạn có thể thêm .svgloại mime vào web.configtệp ứng dụng của mình :

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

Cảm ơn nhiều. Trong trường hợp của tôi, nó đã khác đi một chút - để chuyển sang IIS (Tôi có ISS, không phải ISSE Express) Tôi đã phải chạy VS trong chế độ quản trị viên, sau đó là tất cả - Tôi đã không định nghĩa svg trong web.config vì tôi đã xác định nó đã có trong IIS.
greenoldman

2

Như đã đề cập ở trên, Cassini bỏ qua các cài đặt này trong web.config để người ta phải sử dụng IIS Express thay thế (tại cài đặt dự án VS) /programming/5924647/setting-mime-types-USE-the-asp- máy chủ phát triển mạng

Để biết thêm thông tin về cách định cấu hình các loại MIME bằng giao diện người dùng quản trị viên hoặc sử dụng web.config cho IIS hoặc IIS Express, hãy xem: http://4rapiddev.com/tips-and-tricks/add-mime-type-flv-mp4- in-iis-for-a-website-or-global /http://4rapiddev.com/tips-and-tricks/add-mime-type-flv-mp4-to-web-config-in-iis-7 /


Bạn đang hỏi đây là một câu hỏi mới, hay hùng biện? Nếu trước đây, xin vui lòng đặt một câu hỏi mới với đầy đủ chi tiết. Nếu sau này, đây có lẽ nên là một nhận xét - vì nó là một câu trả lời rất kém ( xem tại đây để biết lý do )
voretaq7

sửa đổi với các liên kết tốt hơn
George Birbilis

tốt hơn nhiều :-)
voretaq7

2

Tôi đã sử dụng câu trả lời của Kev, bởi:

  1. Cài đặt IIS 8.0 Express từ Trình cài đặt nền tảng web
  2. Thay đổi thuộc tính của dự án để sử dụng IIS Express và tạo Thư mục ảo cho nó
  3. Thêm cấu hình của web.config → system.webServer
<staticContent>
    <remove fileExtension=".svg" />
    <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
</staticContent>

2

Cách giải quyết của tôi cho việc này là tạo ra Olephandler của riêng tôi tại địa phương, ghi đè kiểu nội dung cho 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();
    }
}

và trong web.config tôi đã thêm:

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

Với giải pháp này, bạn không phải sử dụng IIS express, bạn chỉ có thể sử dụng máy chủ phát triển thông thường trong visual studio 2010


1
Thật là quá tệ khi loại chuyện này phải xảy ra ...
Jarrod Mosen

1

Tôi đang chạy IIS7 và đã có thể khắc phục điều này bằng cách nhấp chuột phải vào máy chủ trong IIS và chọn thuộc tính. Sau đó, tôi nhấp vào nút MIME .... Sau đó tôi nhấp vào Mới. Đối với phần mở rộng tôi đã nhập .svg. Đối với loại MIME tôi đã nhập vào hình ảnh / svg + xml. Sau đó tôi đã lưu tất cả và thực hiện một iisreset từ dấu nhắc lệnh. Làm việc tuyệt vời.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.