ASP.NET Core 2.0中的URL重写

4

我想重写URL

http://localhost:56713/Home/UserDetails?Code=223322

使用

标签


http://localhost:56713/223322

我已经在 StartUp.cs 中写了以下内容,但它没有起作用。
var rewrite = new RewriteOptions()
  .AddRewrite(@"{$1}", "Home/UserDetails?Code={$1}",true);
2个回答

6
您需要在AddRewrite函数的第一个参数中使用正则表达式。
var rewrite = new RewriteOptions().AddRewrite(
     @"^Home/UserDetails?Code=(.*)",  // RegEx to match Route
     "Home/{$1}",                     // URL to rewrite route
     skipRemainingRules: true         // Should skip other rules
);

这个链接可能会提供更多的例子,有关it技术方面的内容。您可以点击以下链接查看:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/url-rewriting?tabs=aspnetcore2x

1
添加一个规则来匹配@"{$1}"是行不通的。术语$1表示使用RegEx解析的值。您尚未执行任何RegEx,因此实际上您告诉它“每当URL为null时重写我的URL”。显然,这不太可能。
您想使用以下正则表达式匹配传入的URL:
@"^Home/UserDetails?Code=(\d+)"

"(\d+)"表示RegEx将匹配“一个或多个数字”并将其存储为变量。由于这是括号中唯一包含的变量,因此该值存储在$1中。
然后,您希望使用解析的该正则表达式的值来重写URL:
"Home/$1"

你需要将这两个字符串传递给AddRewrite方法:
AddRewrite(
    @"^Home/UserDetails?Code=(\d+)", // RegEx to match URL
    "Home/$1", // URL to rewrite
    true // Stop processing any aditional rules
);

谢谢。当查询字符串类似于“(abc) - xyz @ 123”时,正则表达式是什么? - Techno Crave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接