2011-01-17 9 views
3

HTTPリクエストをアクションにではなくファイルにルーティングします。asp.net mvc 2.0:静的リソースへのリクエストの転送

重要:私はモジュールを書き換えIIS 7.0 URLを使用して実用的なソリューションをを持っていますが、家庭でのデバッグ(なしIIS 7.0)のために私は、URLの書き換えを使用することはできません。私は~/images/フォルダに/images/を含む任意のURLを指すようにしたい

具体的な状況

例:

http://wowreforge.com/images/a.png -> /images/a.png 
http://wowreforge.com/Emerald Dream/Jizi/images/a.png -> /images/a.png 
http://wowreforge.com/US/Emerald Dream/Jizi/images/a.png -> /images/a.png 
http://wowreforge.com/characters/view/images/a.png -> /images/a.png 

問題がページ "view_character.aspx" は、複数のURLからに到着することができるという事実から茎: は7.0(統合モードのIIS

http://wowreforge.com/?name=jizi&reaml=Emerald Dream 
http://wowreforge.com/US/Emerald Dream/Jizi 

コンテキスト)、ASP.NET MVC 2.0

それはこのような状況の代わりに、URLが書き換えにASP.NET MVCルーティングを使用することは悪い考えのエクストラクレジットの質問

  • ですか?
  • IIS 7.0は要求を物理ファイルにルーティングしますか?

答えて

3

おそらく画像へのリンクを書き換える必要があります。

<img src="<%= ResolveUrl("~/images/a.png") %>" /> 

あなたのルートで画像を処理する必要はありません。あなたが をルーティングを通してそれを行うだろうどのように

UPDATE 今、あなたはこれも」doesnのImageRouteHandlerとImageHandler

public class ImageRouteHandler : IRouteHandler 
{ 
    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     //you'll need to figure out how to get the physical path 
     return new ImageHandler(/* get physical path */); 
    } 
} 

public class ImageHandler : IHttpHandler 
{ 
    public string PhysicalPath { get; set; } 

    public ImageHandler(string physicalPath) 
    { 
     PhysicalPath = physicalPath; 
    } 

    public void ProcessRequest(HttpContext context) 
    { 
     context.Response.TransmitFile(PhysicalPath); 
    } 

    public bool IsReusable 
    { 
     get { return true; } 
    } 
} 

を作成する必要があり、あなたのRouteTable

routes.Add("images", new Route("{*path}", null, 
    new RouteValueDictionary(new { path = ".*/images/.*"}), 
    new ImageRouteHandler())); 

にこのエントリを追加キャッシュを実行しないでください。 ReflectorのSystem.Web.StaticFileHandlerで、より完全な実装のためにAsp.Netアプリケーションの静的ファイルを処理するハンドラをチェックすることができます。

+0

javascriptでhtmlを生成しても動作しません。また、javascriptファイルのURLを解決するのが面倒です。 –

+0

@ user93422カスタムルートハンドラを作成してルートテーブルを汚染するよりも扱いにくいですか? – Vadim

+1

は間違いなくそうです。しかし、もう一度、私はどのようなルートが見えるかわからない。それにもかかわらず、私はそれがルーティングを通してどのように行われるかを知りたい。 –

関連する問題