2

これが私の RouteConfig の外観です。

 public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute("Robots.txt",
            "robots.txt",
            new { 
                controller = "Home", 
                action = "Robots", 
                id = "", 
                language = "en", 
                culture = "us" 
            });
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute(
            "Default",
            "{language}/{culture}/{controller}/{action}/{id}",
            new
            {
                controller = "Home",
                action = "Index",
                id = "",
                language = "en",
                culture = "us"
            });
    }
}

私の理解によれば、www.mysite.com/robots.txt にアクセスすると、サイトは robots.txt にルーティングされるはずですが、そうではありません。別の静的ページの提供にも問題がありましたが、回避策が見つかり、静的 .html ページを提供する必要はありませんでした。

MVC3 で別のサイトを構築し、そこで使用したルート構成パターンをコピーしましたが、正常に動作しているようです。これがうまくいかない理由はありますか?

PS www.mysite.com/en/US/Home/Robots を参照すると、robots.txt ファイルが正常に表示されるため、すべてのコントローラー、アクション、およびビューが正常に一致しています。

ありがとう!

4

1 に答える 1

6

これは、IIS が拡張子のためにそれを静的ファイルであると認識し、処理のためにマネージ パイプラインに渡さないことが原因である可能性があります。

次のハンドラーを<system.webServer>web.config ファイルのセクションに追加して、すべての要求が/robots.txtマネージド パイプラインを通過するようにすることができます (したがって、セットアップしたルートを通過します)。

<system.webServer>
    <handlers>
        ...
        <add name="Robots" path="robots.txt" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

すべてのリクエストに対してマネージド モジュールを有効にすることでこれを機能させることもできますが、すべてのリクエストがマネージド パイプラインを通過するため、追加のオーバーヘッドが発生する可能性があるため、お勧めしません。

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    ...
</system.webServer>
于 2013-03-30T22:56:09.317 に答える