加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – Route Constraint Isnt适用于ASP.NET MVC

发布时间:2020-12-16 03:28:09 所属栏目:asp.Net 来源:网络整理
导读:为什么路线http:// localhost:2222/2012-adidas- spring-classic / 37,不能从以下路线匹配中获取?我收到404错误. public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.IgnoreRoute("
为什么路线http:// localhost:2222/2012-adidas- spring-classic / 37,不能从以下路线匹配中获取?我收到404错误.

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.IgnoreRoute("{*vti_inf}",new { vti_inf = @"(.*/)?_vti_inf.html(/.*)?" });
            routes.IgnoreRoute("{*vti_rpc}",new { vti_rpc = @"(.*/)?_vti_rpc(/.*)?" });

            #region API

            routes.MapRouteLowercase(
             "NamedHomeEvent","{year}-{name}/{Id}",new { controller = "Event",action = "Index",year = DateTime.Now.Year },new { year = @"d{4}",Id = @"d+" }
            );



   public virtual ActionResult Index(int? id,int? year,string name)
        {

解决方法

路由引擎无法帮助您.您可以编写自定义路由来处理这种情况:

public class MyRoute : Route
{
    public MyRoute()
        : base(
            "{year-name}/{id}",new RouteValueDictionary(new { controller = "Event",id = UrlParameter.Optional }),new RouteValueDictionary(new { id = @"d*" }),new MvcRouteHandler()
        )
    {
    }

    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
        var routeData = base.GetRouteData(httpContext);
        if (routeData == null)
        {
            return null;
        }

        var yearName = (string)routeData.Values["year-name"];
        if (string.IsNullOrWhiteSpace(yearName))
        {
            return null;
        }

        var parts = yearName.Split(new[] { '-' },2,StringSplitOptions.RemoveEmptyEntries);
        if (parts.Length < 2)
        {
            return null;
        }

        var year = parts.First();
        int yearValue;
        if (!int.TryParse(year,out yearValue))
        {
            return null;
        }

        var name = parts.Last();

        routeData.Values.Add("year",year);
        routeData.Values.Add("name",name);

        return routeData;
    }
}

然后注册这条路线:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("{*vti_inf}",new { vti_inf = @"(.*/)?_vti_inf.html(/.*)?" });
    routes.IgnoreRoute("{*vti_rpc}",new { vti_rpc = @"(.*/)?_vti_rpc(/.*)?" });

    routes.Add("NamedHomeEvent",new MyRoute());
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读