1

アプリケーションで ASP.NET MVC を使用しています。
ユーザーは、ページに含めることで、独自の画像、スタイル、スクリプトを指定できます。
しかし、存在しないファイルへの URL を指定すると、ルーティング メカニズムは、画像やスタイルなどへの URL によってコントローラーとアクションを見つけようとします。

メソッド IgnoreRoute を追加し、ルーティングによって処理したくないすべての拡張機能を指定しました。

URL が「Views/...」で始まらない限り、正しく機能します。
この場合、URL がアプリケーションに渡され、アプリケーション内でエラー 404 が実行されます。
しかし、IIS でこのエラーを処理したいと考えています。

これは、空のプロジェクトでテストできます。このコードを Global.asax.cs ファイルに使用するだけです。


using System;
using System.Web.Mvc;
using System.Web.Routing;

namespace MvcApplication1
{
    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.IgnoreRoute(
                "{*staticfile}",
                new { staticfile = @".*\.(jpg|gif|jpeg|png|js|css|htm|html|htc)$" }
            );

            routes.MapRoute(
                "Default",                                              // Route name
                "{controller}/{action}/{id}",                           // URL with parameters
                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
            );

        }

        protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }

        void Application_Error(object sender, EventArgs e)
        {

        }
    }
}

次に、このアプリケーションを IIS でホストする必要があります (たとえば、http://localhost/testmvc/)。

Application_Error メソッド内にブレークポイントを配置して、アプリケーション内でエラーがいつ実行されるかを確認できます

テスト URL を開きます: http://localhost/testmvc/test.css
IIS がそのエラーを処理したことがわかります。 ここに画像の説明を入力

ここで、パスに「/Views/...」を含む別のテスト URL を開きます: http://localhost/testmvc/Views/test.css
そして、ASP.NET によってエラーが処理されたことがわかります。 ここに画像の説明を入力

問題は、パスに「ビュー」を含む URL を処理しないように MVC に指示する設定が存在する可能性があることです。

4

2 に答える 2

3

デフォルトでは、MVC では、すべてのファイル タイプが System.Web.HttpNotFoundHandler にマッピングされるため、/Views フォルダーの下のアイテムを直接アドレス指定することはできません。

これを回避するには、 /Views/web.config の定義を変更して、基本的にその場所の他のすべてを無視するように指示します

<追加パス="*.cshtml" 動詞="*" タイプ="System.Web.HttpNotFoundHandler"/>

複数のファイル タイプを含めたい場合、IIS 6 は 7 とは異なるため、これに基づいてブログ エントリを作成しました。参照: http://completedevelopment.blogspot.com/2011/06/using-views-outside-of-views-or-other.html

于 2011-05-31T18:09:31.477 に答える
3

これが私のやり方です:

1-Viewsフォルダーに新しいフォルダーを作成します。マイフォルダー

2-静的ページをこの新しいフォルダーに追加します。ファイル名.cshtml

3-「Views」フォルダーから web.config ファイルをコピーし、作成したばかりの新しいフォルダー (myFolder) に貼り付けます。

4-新しいweb.configでこれを置き換えます:

 <add path="*.*" verb="*" type="System.Web.HttpNotFoundHandler"/>

これとともに :

<add path="*.*" verb="*" type="System.Web.DefaultHttpHandler"/>

5-これらの行が見つかった場合は削除します:

   <remove name="BlockViewHandler"/>
      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode"            type="System.Web.HttpNotFoundHandler" />

結果 : このフォルダ内のすべてのファイルが、ルーティングなしで機能するようになりました!

于 2013-08-28T13:34:01.767 に答える