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

如何在使用ASP.NET友好URL时忽略某些路由?

发布时间:2020-12-16 00:05:46 所属栏目:asp.Net 来源:网络整理
导读:我成功使用ASP.NET友好URL,但我需要忽略特定Foo.aspx页面的路由(因为此页面需要POST数据,并且一旦重新路由POST数据在Page_Load()中不再可用!). 看起来使用ASP.NET友好URL会丢弃任何忽略路由的尝试.使用ASP.NET友好URL路由后,即使是忽略路由的MSDN example也
我成功使用ASP.NET友好URL,但我需要忽略特定Foo.aspx页面的路由(因为此页面需要POST数据,并且一旦重新路由POST数据在Page_Load()中不再可用!).

看起来使用ASP.NET友好URL会丢弃任何忽略路由的尝试.使用ASP.NET友好URL路由后,即使是忽略路由的MSDN example也不起作用:

routes.Ignore("{*allaspx}",new {allaspx=@".*.aspx(/.*)?"});

并忽略到Foo.aspx的路由,代码看起来应该是这样,不是吗?

routes.Ignore("{*fooaspx}",new { fooaspx = @"(.*/)?foo.aspx(/.*)?" });

Global.asax代码如下所示:

public static void RegisterRoutes(RouteCollection routes) {

    // This doesn't work whether I put this code before or after ASP.NET Friendly URLs code.
    routes.Ignore("{*allaspx}",new { allaspx = @".*.aspx(/.*)?" });

    routes.Canonicalize().Lowercase();

    var settings = new FriendlyUrlSettings();
    settings.AutoRedirectMode = RedirectMode.Permanent;   
    routes.EnableFriendlyUrls(settings);
}

void Application_Start(object sender,EventArgs e) {
   RegisterRoutes(RouteTable.Routes);
}

这个问题has been asked on the ASP.NET Friendly URLs codeplex site,但没有得到答案.

谢谢你的帮助:)

解决方法

感谢Damian Edwards的评论,我完全解决了这个问题,感谢Damian.

我只需要从WebFormsFriendlyUrlResolver派生来覆盖方法ConvertToFriendlyUrl(),当url匹配我不想重定向的url时,使其成为no-op:

using Microsoft.AspNet.FriendlyUrls.Resolvers;

public class MyWebFormsFriendlyUrlResolver : WebFormsFriendlyUrlResolver {
   public MyWebFormsFriendlyUrlResolver() { }

   public override string ConvertToFriendlyUrl(string path) {
      if (!string.IsNullOrEmpty(path)) {
         if (path.ToLower().Contains("foo")) { // Here the filter code
            return path;
         }
      }
      return base.ConvertToFriendlyUrl(path);
   }
}

然后在Global.asax中,代码现在看起来像:

public static void RegisterRoutes(RouteCollection routes) {
    routes.Canonicalize().Lowercase();
    var settings = new FriendlyUrlSettings();
    settings.AutoRedirectMode = RedirectMode.Permanent;
    routes.EnableFriendlyUrls(settings,new IFriendlyUrlResolver[] { 
                                 new MyWebFormsFriendlyUrlResolver() });
}

void Application_Start(object sender,EventArgs e) {
   RegisterRoutes(RouteTable.Routes);
}

(编辑:李大同)

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

    推荐文章
      热点阅读