Svg画像を含むシンプルなWebページがあるとします。
<img src="foobar.svg" alt="not working" />
このページを静的なHTMLページとして作成して直接表示すると、svgが表示されます。このsvgのアドレスを入力すると、表示されます。
しかし、これを.aspxページとして作成し、Visual Studioから動的に起動すると、alt
テキストが表示されます。このsvgのアドレスを(ローカルファイルではなくlocalhostから)入力すると、ブラウザは表示せずにダウンロードを試みます。
IIS(サーバー全体-"image/svg + xml"の場合)でMIMEタイプを既に定義し、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を示します: asp-net-applicati
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タイプの知識がありません。私はしばらく前にスタックオーバーフローで同様の問題への回答を書きました:
組み込みサーバーは.svg
ファイルを次のように提供しています:
Content-Type: application/octet-stream
これが、ブラウザがダウンロードを促す原因となっている可能性があります。
Visual Studioで、IIS Expressを使用していることを確認します。サイトのプロジェクトプロパティを開き、垂直タブリストから[Web]タブを選択します。
IIS 7.5 Expressがインストールされていない場合は、ここから入手できます。
最大限に活用するには、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
MIMEタイプをアプリケーションのweb.config
ファイルに追加できます。
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
</staticContent>
</system.webServer>
</configuration>
これに対する私の回避策は、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を使用する必要はありません。通常の開発サーバーをVisual Studio 2010で使用できます。
上記のように、Cassiniはweb.configのこれらの設定を無視するため、代わりにIIS Expressを(VSプロジェクト設定で)使用する必要があります) https://stackoverflow.com/questions/5924647/setting-mime-types-using-the-asp-net-development-server
IISまたはIIS Expressの場合、管理UIまたは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 /
私は、Kevの回答を使用しました。
<staticContent>
<remove fileExtension=".svg" />
<mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
</staticContent>
IIS7を実行していますが、IISでサーバーを右クリックし、プロパティを選択することでこれを修正できました。次に、[MIMEタイプ...]ボタンをクリックしました。次に[新規]をクリックしました。拡張子については.svgと入力しました。MIMEタイプについてはimage/svg + xmlと入力しました。次に、すべて保存して、コマンドプロンプトからiisresetを実行しました。
IISにアクセスできる場合、これにより問題も修正されます: http://httpjunkie.com/2014/884/svg-no-iis/