asp.net-mvc - 路由约束到特定文件类型

标签 asp.net-mvc asp.net-mvc-routing url-routing

我想写一个只适用于某些文件类型的包罗万象的路线。现在我有

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

在我其他路线的底部。这适用于捕捉一切。但是,我还有一些其他遗留文件扩展名我想忽略,所以暂时我需要这个最终路径来只触发 .html 文件。

我可以申请这个路线限制吗?

最佳答案

我想通了。享受吧。

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"}) });

关于asp.net-mvc - 路由约束到特定文件类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14461881/

相关文章:

javascript - 如何在 Ember.js 中为路由生成 url

asp.net - ASP MVC 路由 - 如何更改默认 id 参数的名称,同时保持默认路由不变

c# - 参数字典包含参数的空条目

c# - 为什么 CSS 和 JS 文件绕过 Asp.Net MVC 路由?

get - 如何使用AngularJS删除GET参数?

c# - 通过 Web API 中的 ModelBinding 将 JavaScript 对象反序列化为 Dictionary<string, string>

asp.net - IIS 7 上的条件 https 重定向

jquery - 使用 Jquery 设置 Kendo Grid POPUP 编辑器值

asp.net-mvc - 寻找一个可以接受 MVC3 中的类属性的 Html.SubmitButton 助手

c# - asp.net core 2.0区分过期session和新用户