为了账号安全,请及时绑定邮箱和手机立即绑定

.Net Core 重写严格的 URL

.Net Core 重写严格的 URL

C#
慕桂英3389331 2022-01-09 15:23:26
我在 .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/abclocalhost:5000/about-us1我想从 url 忽略这个 /abc 或 1。我怎样才能做到这一点?
查看完整描述

1 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

最后我通过两种方式解决了这个问题。现在我将详细描述。


实施 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();

        }

这对我来说是完美的解决方案,因为它工作正常


查看完整回答
反对 回复 2022-01-09
  • 1 回答
  • 0 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信