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

     2023-03-05     272

关键词:

【中文标题】如何在使用 ASP.NET 友好 URL 时忽略某些路由?【英文标题】:How to ignore some route while using ASP.NET Friendly URLs? 【发布时间】:2014-10-17 02:54:38 【问题描述】:

我成功使用了 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,但没有得到答案。

感谢您对此的帮助:)

【问题讨论】:

我的理解是如果存在物理文件,那么它优先(高于任何路由配置),那么为什么要“重新路由”/重定向?跨度> ASP.NET 友好 URL 代码对所有存在的物理文件 .aspx 文件(包括 site\Foo.aspx)进行重定向工作。例如 url 'Site.com\Foo-Bar.aspx' 被重定向到 'site.com\foo-bar' 并且 Foo-Bar.aspx 文件存在。这怎么能解释 routes.Ignore() 不起作用? 【参考方案1】:

这很有趣 - 不得不修补 :) 在我上面的评论中,我想说的是“无需忽略”。

我是“对的”和“错的”。

对:不用理会 错误:不是因为我所说的(回复:物理文件),而是一开始没有调用重定向

这会炸掉(会发生重定向,POST数据丢失):

<asp:Button ID="btn1" runat="server" Text="Go" PostBackUrl="~/Target.aspx" />

这会很好(你会得到 POST 数据,不会发生重定向):

 <asp:Button ID="btn1" runat="server" Text="Go" PostBackUrl="~/Target" />

区别?我要求 FriendlyUrls 在第二个选项中“重新路由”任何内容。在第一个选项中,我要求一个“aspx”文件,因此 FriendlU​​rls 将尽职尽责地完成其存在和“处理”它的目的(并永久重定向到一个“友好 url”,它是一个 GET 并且一切顺利POST 数据)。

在第一个选项中检查请求 (target.aspx): 在第二个选项中检查请求(无扩展,目标):

这是一条线索:

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

它会执行它所说的“永久重定向”(到“友好的 url”)......当“必要”时(如果请求“aspx”文件)。您可以在 WebForms 站点中的任何页面上进行修改

如果您请求foo.aspx,您将看到重定向(到foo) 如果您请求foo,则无需重定向

你也可以注释掉

settings.AutoRedirectMode = RedirectMode.Permanent;

一切都会奏效,但有点违背 FriendlyUrls 的目的......

仔细想想,这很有意义。没有必要对每个请求进行“重定向”(对于性能来说太糟糕了),而仅在必要时/在必要时...

第……

【讨论】:

谢谢!您的解决方案将是一个不错的 B 计划。回发到 Site.com\Foo.aspx 的源现在具有硬编码的 url。我们可以将源 URL 更改为 Site.com\Foo,但这需要付出代价。仍然为什么 route.Ignore() 不起作用?是否有另一种重定向选择?我还尝试将 Foo.aspx 重定向到 Web.config\system.webServer\rewrite\rules 中的 Foo,但没有成功,POST 数据也会在这里丢失。 忽略路由不起作用,因为我们的重定向逻辑发生在 HTTP 模块中,而不是路由本身。这样我们就可以处理默认文档的重定向(例如 Default.aspx)。至于忽略特定路径,如果您从 WebFormsFriendlyUrlResolver 派生并自定义并覆盖一些方法,使它们在路径匹配您想要忽略的内容时变为无操作,则这可能是可能的。然后将一个实例传递给接受 IFriendlyUrlResolver 作为参数的 EnableFriendlyUrls 的重载。【参考方案2】:

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

我只需要从 WebFormsFriendlyUrlResolver 派生来覆盖方法 ConvertToFriendlyUrl() 以使其在 url 与我不想重定向的 url 匹配时变为无操作:

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

【讨论】:

如何在 ASP.NET 中将 base64 图像 URL 转换为用户友好 URL

】如何在ASP.NET中将base64图像URL转换为用户友好URL【英文标题】:HowtoConvertabase64imageurltoUserFriendlyURLinASP.NET【发布时间】:2016-08-2403:15:20【问题描述】:我正在从数据库中检索以base64格式存储的图像。我的要求是,我想将base64图像... 查看详情

是否可以在经典 asp 中进行友好的 url(url 重写)?

...icasp?【发布时间】:2010-11-0814:23:48【问题描述】:我知道如何在asp.net中创建/实现友好的url,但是是否有可能(如果可以,如何)在经典的asp中做到这一点?如果不可能,谷歌将如何响应(SEO)创建页面,其唯一目的是重定向(加... 查看详情

如何忽略asp.net表单中的路由url路由

】如何忽略asp.net表单中的路由url路由【英文标题】:Howtoignorerouteinasp.netformsurlrouting【发布时间】:2010-09-2108:49:48【问题描述】:我正在使用.NET3.5SP1框架,并且在我的应用程序中实现了URL路由。我收到了javascript错误:Error:ASP.NETA... 查看详情

ASP.NET 的友好 URL

...om/userid/123424/我想让你注意结束路径/userid/123424/在ASP.NET中如何做到这一点?【问题讨论】:【参考方 查看详情

ASP.NET 友好 URL

】ASP.NET友好URL【英文标题】:ASP.NETFriendlyURLs【发布时间】:2010-12-1710:27:51【问题描述】:在我的研究中,我发现了两种方法。两者都需要对Global.Asax中的Application_BeginRequest过程进行修改,您将在其中运行代码来执行实际的URL映... 查看详情

ASP.Net 如何在提交时从特定元素中删除/忽略验证?

】ASP.Net如何在提交时从特定元素中删除/忽略验证?【英文标题】:ASP.NetHowremove/ignorevalidationfromspecificelementsuponsubmit?【发布时间】:2019-08-1313:59:21【问题描述】:我有一个带有两个单选按钮的简单表单的ASP.NetCore项目。一个单选... 查看详情

ASP.NET 友好 URL 和 default.aspx

...的很想摆脱/default选项,让它总是路由到根目录。我试过使用routes.MapPageRoute("","Def 查看详情

ASP.NET 友好 URL PostBackUrl RequestType 以 GET 形式提供

...【发布时间】:2014-08-0220:20:51【问题描述】:我正在尝试使用PostBackUrl从上一页获取值,但没有来自上一页的值然后我在PageLoad中检查了传入的请求类型,显示为GET首页<asp:ButtonID= 查看详情

如何使用 c# asp.net 从 url 获取数据?

】如何使用c#asp.net从url获取数据?【英文标题】:HowcanIusec#asp.nettogetdatafromurl?【发布时间】:2019-01-3012:29:37【问题描述】:我正在尝试在我的c#asp.net后端中获取我通过表单发送到angularJS的一些信息,但我在执行此操作时遇到了麻... 查看详情

ASP.NET MVC 中的 RSS 源

...NETMVC【发布时间】:2010-09-0522:19:34【问题描述】:您建议如何在ASP.NETMVC中处理RSS源?使用第三方库?在BCL中使用RSS的东西?只是制作一个呈现XML的RSS视图?还是完全不同的东西?【问题讨论】:使用RssToolkit,您只需要在项目中... 查看详情

如何在 ASP.NET Core MVC 中获取 Url Referrer?

】如何在ASP.NETCoreMVC中获取UrlReferrer?【英文标题】:HowcanIgetUrlReferrerinASP.NETCoreMVC?【发布时间】:2016-08-0416:08:21【问题描述】:我正在尝试将ASP.NETMVC网络表单迁移到ASP.NETCoreMVC。目前,我在使用Request.UrlReferrer课程时遇到了问题... 查看详情

如何在 ASP.NET Core 中更改 Swagger 的基本 url

】如何在ASP.NETCore中更改Swagger的基本url【英文标题】:HowtochangebaseurlofSwaggerinASP.NETcore【发布时间】:2016-12-3103:50:48【问题描述】:默认情况下,当您在ASP.NETCore项目中启用swagger时,它在url上可用:http://localhost:<random_port>/swag... 查看详情

使用自定义位置时如何在 asp.net core mvc 中指定视图位置?

】使用自定义位置时如何在asp.netcoremvc中指定视图位置?【英文标题】:Howtospecifytheviewlocationinasp.netcoremvcwhenusingcustomlocations?【发布时间】:2016-04-2014:40:37【问题描述】:假设我有一个控制器,它使用基于属性的路由来处理请求... 查看详情

ASP.NET MVC 2 - 如何使用 IgnoreRoute 忽略整个目录?

】ASP.NETMVC2-如何使用IgnoreRoute忽略整个目录?【英文标题】:ASP.NETMVC2-HowtoignoreanentiredirectoryusingIgnoreRoute?【发布时间】:2011-03-1604:12:21【问题描述】:我尝试了以下两种方法来尝试忽略我的“资产”文件夹,但我不断出现错误。... 查看详情

在 asp.net 核心中使用返回 url

】在asp.net核心中使用返回url【英文标题】:Workingwithreturnurlinasp.netcore【发布时间】:2018-01-3006:02:39【问题描述】:如果用户在访问特定URL时未经过身份验证/授权,我们会尝试将用户(使用返回URL)重定向到登录页面。但是,在... 查看详情

ASP.NET MVC 中返回视图的 URL

...的上下文中linktext是否可以从响应表单帖子的控制器转到友好网址?【问题讨论】:【参考方案1】:是的。您的控制器操作可以根据您希望为其定义路由的方式确定友好url,然后重定向到友好url而不是返回视图。它会引起另一个... 查看详情

使用 ASP.NET MVC 的多语言网站

】使用ASP.NETMVC的多语言网站【英文标题】:Multi-lingualwebsiteswithASP.NETMVC【发布时间】:2010-09-2210:16:13【问题描述】:在构建多语言网站(使用ASP.NET网络表单)时,我将使用HTTP模块来重写URL,最终得到一些友好的(对人类和搜索... 查看详情

如何使用 url 重写将位置数据存储在我的 asp.net 站点上所有页面的 url 中?

】如何使用url重写将位置数据存储在我的asp.net站点上所有页面的url中?【英文标题】:HowcanIstorelocationdataintheurlforallpagesonmyasp.netsiteusingurlrewriting?【发布时间】:2009-11-0720:15:49【问题描述】:使用ASP.NET3.5,WindowsServer2003,IIS6我想针... 查看详情