.Net Core 重写严格的 URL

我在 .net core 2.1 上进行了项目,在那里我重写了 url,例如


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)

它工作正常,但是当使用这个 url 添加一些东西时,它的工作也是不可接受的。


喜欢


localhost:5000/about-us/abc

localhost:5000/about-us1

我想从 url 忽略这个 /abc 或 1。我怎样才能做到这一点?


慕桂英3389331
浏览 159回答 1
1回答

红糖糍粑

最后我通过两种方式解决了这个问题。现在我将详细描述。实施 UrlRules:我写了一个继承自 IRule 的类,例如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();        }这对我来说是完美的解决方案,因为它工作正常
打开App,查看更多内容
随时随地看视频慕课网APP