C# .Net核心重写严格的Url
我在.NETCore2.1上做了一个项目,在那里我重写URL,比如C# .Net核心重写严格的Url,c#,url-rewriting,.net-core,C#,Url Rewriting,.net Core,我在.NETCore2.1上做了一个项目,在那里我重写URL,比如 var rewrites = new RewriteOptions() .AddRewrite(@"GetCountryInfo", "Home/GetCountryInfo", skipRemainingRules: true) .AddRewrite(@"about-us", "Home/About", skipRemainingRules: t
var rewrites = new RewriteOptions()
.AddRewrite(@"GetCountryInfo", "Home/GetCountryInfo", skipRemainingRules: true)
.AddRewrite(@"about-us", "Home/About", skipRemainingRules: true)
.AddRewrite(@"pricing", "Home/Pricing", skipRemainingRules: true)
.AddRewrite(@"sign-in", "Home/Sign_in", skipRemainingRules: true)
.AddRewrite(@"sign-up", "Home/Sign_up", skipRemainingRules: true)
它的工作很好,但当一些东西添加这个网址,然后它的工作,这是不可接受的
像
我想忽略此/abc或url中的1。我怎样才能做到这一点 最后我用两种方法解决了这个问题。现在我将详细描述
public class UrlRules : IRule
{
public void ApplyRule(RewriteContext context)
{
var request = context.HttpContext.Request;
if (!IsValidUrl(request.Path))
{
var response = context.HttpContext.Response;
response.StatusCode = StatusCodes.Status404NotFound;
context.Result = RuleResult.EndResponse;
response.Headers[HeaderNames.Location] = "/home/error";
}
}
public bool IsValidUrl(string path)
{
bool urlValid = false;
switch (path)
{
case "/":
case "/about-us":
case "/about-us/":
case "/GetCountryInfo":
case "/pricing":
case "/pricing/":
case "/sign-in":
case "/sign-in/":
case "/sign-up":
case "/sign-up/":
urlValid = true;
break;
default:
urlValid = false;
break;
}
return urlValid;
}
}
然后将路由配置为
app.UseMvc(routes =>
{
var rewrites = new RewriteOptions()
.Add(new UrlRules())
.AddRewrite(@"GetCountryInfo", "Home/GetCountryInfo", skipRemainingRules: true)
.AddRewrite(@"about-us", "Home/about", skipRemainingRules: true)
.AddRewrite(@"pricing", "Home/Pricing", skipRemainingRules: true)
.AddRewrite(@"sign-in", "Home/Sign_in", skipRemainingRules: true)
.AddRewrite(@"sign-up", "Home/Sign_up", skipRemainingRules: true);
app.UseRewriter(rewrites);
routes.MapRoute(
name:"default",
template: "{controller=Home}/{action=Index}/{id?}");
});
它起作用了
[Route("~/about-us")]
public IActionResult About()
{
return View();
}
这对我来说是个完美的解决方案,因为它工作得很好
[Route("~/about-us")]
public IActionResult About()
{
return View();
}