我正在成功使用ASP.NET友好URL,但我需要忽略特定Foo.aspx
页面的路由(因为此页面需要POST数据,并且一旦重新路由,POST数据就不再可用于{ {1}}!)。
看起来使用ASP.NET友好URL会丢弃任何忽略路由的尝试。使用ASP.NET友好URL路由后,即使忽略路由的MSDN example也不起作用:
Page_Load()
要忽略到routes.Ignore("{*allaspx}", new {allaspx=@".*\.aspx(/.*)?"});
的路由,代码看起来应该是这样,不是吗?
Foo.aspx
routes.Ignore("{*fooaspx}", new { fooaspx = @"(.*/)?foo.aspx(/.*)?" });
代码如下:
Global.asax
这个问题has been asked on the ASP.NET Friendly URLs codeplex site,但没有得到答案。
感谢您的帮助:)
答案 0 :(得分:10)
感谢Damian Edwards的评论,我完全解决了这个问题,感谢Damian。
我只需要从WebFormsFriendlyUrlResolver
派生以覆盖方法ConvertToFriendlyUrl()
,当网址与我不想重定向的网址匹配时,将其设为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);
}
答案 1 :(得分:3)
这很有趣 - 不得不修补:)在上面的评论中,我想说的是"不需要忽视"。
我是"对"和"错误"。
这将弹出(重定向将发生,POST数据丢失):
<asp:Button ID="btn1" runat="server" Text="Go" PostBackUrl="~/Target.aspx" />
这样会很好(您将获得POST数据,不会发生重定向):
<asp:Button ID="btn1" runat="server" Text="Go" PostBackUrl="~/Target" />
区别?我不要求FriendlyUrls重新路由&#34;第二个选项中的任何内容。在第一个选项中,我要求&#34; aspx&#34;文件,所以FriendlUrls将尽职尽责地做到和处理&#34;它(并永久重定向到&#34;友好网址&#34;这是一个GET,并且有所有POSTed数据)。
这是一个线索:
var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Permanent;
它完成它所说的,&#34;做永久重定向&#34; (对于&#34;友好的网址&#34;)...当&#34;必要&#34; (如果请求&#34; aspx&#34;文件)。您可以使用WebForms站点中的任何页面修改它
foo.aspx
,您会看到重定向(至foo
)foo
,请不要重定向你也可以注释掉
settings.AutoRedirectMode = RedirectMode.Permanent;
并且事情会起作用,但有点会破坏FriendlyUrls的目的......
考虑一下,这很有道理。没有必要重定向&#34;在每个请求(对于性能而言),而不仅仅是在必要时...
H个....