3

特定のファイル タイプにのみ適用されるキャッチオール ルートを作成したいと考えています。今、私は持っています

routes.MapRoute("Template", "{*path}", new {controller = "Template", action = "Default"});

私の他のルートの一番下にあります。これは、すべてをキャッチするのにうまく機能します。ただし、無視したいレガシー ファイル拡張子が他にもいくつかあるため、当面は、この最終ルートで .html ファイルのみをトリガーする必要があります。

これに適用できるルートの制約はありますか?

4

1 に答える 1

4

私は何かを考え出した。楽しみ。

using System;
using System.Linq;
using System.Web;
using System.Web.Routing;

namespace Project.App_Start
{
    public class FileTypeConstraint : IRouteConstraint
    {
        private readonly string[] MatchingFileTypes;

        public FileTypeConstraint(string matchingFileType)
        {
            MatchingFileTypes = new[] {matchingFileType};
        }

        public FileTypeConstraint(string[] matchingFileTypes)
        {
            MatchingFileTypes = matchingFileTypes;
        }

        public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
        {
            string path = values["path"].ToString();
            return MatchingFileTypes.Any(x => path.ToLower().EndsWith(x, StringComparison.CurrentCultureIgnoreCase));
        }
    }
}

使用法:

routes.MapRoute(
    "Template", 
    "{*path}", 
    new {controller = "Template", action = "Default"}, 
    new { path = new FileTypeConstraint(new[] {"html", "htm"}) });
于 2013-01-22T17:41:09.300 に答える