Visual StudioでSVGおよびWebテスト用にIISを構成する方法


14

svg画像を含む簡単なWebページがあるとします。

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

このページを静的なHTMLページとして作成し、直接表示すると、svgが表示されます。このsvgのアドレスを入力すると、表示されます。

しかし、これを.aspxページとして作成し、Visual Studioから動的に起動すると、altテキストが表示されます。このsvgのアドレスを(ローカルファイルとしてではなくlocalhostから)入力すると、ブラウザは表示する代わりにダウンロードしようとします。

IISで既にMIMEタイプを定義し(サーバー全体-"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. ***

記録については、ここにFiddlerの役立つQ&Aがありますhttps : //stackoverflow.com/questions/826134/how-to-display-localhost-traffic-in-fiddler-while-debugging-an-asp-net-applicati


SOでこれに対するより良い答えが得られると思います。要するに、ASPXが既に動作していると仮定すると、ブラウザがSVGファイルであると認識するために、ASPXページからMIMEタイプとしてSVGを発行する必要があります。おそらく、ページからSVGを動的に送信しようとしていますか?もしそうなら、それが単一のページとして機能する場合は知る限り、IMGエントリで機能します。
TristanK

@ TristanK、aspxは「MIMEタイプとしてのSVG」を出力せず、<img src...上記のように単純に含まれます。aspxは完全なhtmlページに「変換」されますが、コンテンツ全体(html、次にsvg)の送信はIISによって行われます。
greenoldman

私はまだあなたが説明していることを理解していませんが、これは開発上の質問だと思うので、StackOverflowで質問した方が良いでしょう。
-TristanK

2
Fiddlerのコピーを取得して、2つの異なる要求をトレースします。これにより、画像の直接要求がこれらの各ケースで異なる動作をする理由についての手がかりが得られる場合があります。手がかりはほとんどの場合、返されるヘッダーにあります。このデータがなければ、サーバーが返す応答を推測するだけです。
ケブ

@macias Kevが言ったように、トラフィックをトレースする必要があります。フィドラーまたは昔ながらのWiresharkはそれを拾うことができるはずです。
クリスS

回答:


14

Fiddlerトレースから、組み込みのVisual Studio Webサーバーを使用してページを提供しているように見えます。

Server: ASP.NET Development Server/10.0.0.0

これがIIS7によって提供されていた場合、次のように表示されます。

Server: Microsoft-IIS/7.5

組み込みのVisual Studio Webサーバーには、提供できるMIMEタイプのセットが限られているだけで、IIS7に設定したMIMEタイプの知識はありません。しばらく前に、スタックオーバーフローに関する同様の問題に対する回答を書きました。

ASP.NET開発サーバーを使用してMIMEタイプを設定する

組み込みサーバーは、.svgファイルを次のように提供しています。

Content-Type: application/octet-stream

これがブラウザのダウンロードを促す原因となっている可能性があります。

Visual Studioで、サイトのプロジェクトプロパティを開き、垂直タブリストから[Web]タブを選択して、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では、インターネットインフォメーションサービス(IIS)7.5 ExpressをWebサイトおよびWebアプリケーションプロジェクトのローカルホスティングサーバーとして使用できます。

IIS 7.5 ExpressはSP1に含まれていないため、個別にダウンロードする必要があります。詳細については、次のブログをご覧ください。http//weblogs.asp.net/scottgu/archive/2011/01/03/vs-2010-sp1-beta-and-iis-developer-express.aspx

それが完了したら.svg、アプリケーションのweb.configファイルにMIMEタイプを追加できます。

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

どうもありがとう。私の場合、IISに切り替えるには(ISSExpressではなくISSがあります)、VSを管理モードで実行する必要があり、その後はすべてでした-web.configでsvgを定義しなかったので既にIISにあります。
greenoldman

2

上記のように、Cassiniはweb.configのこれらの設定を無視するため、代わりに(VSプロジェクト設定で)IIS Expressを使用する必要があります /programming/5924647/setting-mime-types-using-the-asp-ネット開発サーバー

管理UIを使用して、またはIISまたはIIS Expressのweb.configを使用してMIMEタイプを構成する方法の詳細については、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 /


これを新しい質問として、または修辞的に質問していますか?前者の場合、完全な詳細を含む新しい質問をしてください。後者の場合、これはおそらくコメントになります
現状で

より良いリンクで改訂
ジョージ

はるかに良い:-)
voretaq7

2

私はKev answerを使用しました:

  1. Web Platform InstallerからIIS 8.0 Expressをインストールする
  2. IIS Expressを使用するようにプロジェクトのプロパティを変更し、その仮想ディレクトリを作成する
  3. web.configの構成に追加→system.webServer
<staticContent>
    <remove fileExtension=".svg" />
    <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
</staticContent>

2

これに対する私の回避策は、svgのcontent-typeを上書きする独自のhttphandlerをローカルに作成することでした。

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を使用する必要はありません。VisualStudio 2010の通常の開発サーバーを使用するだけです。


1
それは...こういうことが起こることを持っていることはかなり総です
ジャロッドMosen

1

IIS7を実行していますが、IISでサーバーを右クリックし、プロパティを選択することでこれを修正できました。次に、[MIMEタイプ...]ボタンをクリックしました。次に、「新規」をクリックしました。拡張子については、.svgと入力しました。MIMEタイプの場合、image / svg + xmlに入力しました。その後、すべて保存し、コマンドプロンプトからiisresetを実行しました。うまくいきました。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.