【问题标题】:Dynamic Url rewrite in ASP.NET COREASP.NET CORE 中的动态 URL 重写
【发布时间】:2018-12-24 12:06:28
【问题描述】:

我正在尝试重写一个 URL,并检测 URL 的一部分是否存在, 然后处理该字符串以最终创建最终 URL。

this article,到目前为止,我找到了一种使用正则表达式替换 URL 段的方法。

我的情况如下: 给定网址

www.whatever.com/segment1/segment2?parameter=value

我需要检测文本“parameter=”是否存在于 URL 中,然后处理该值并得到如下内容:

www.whatever.com/segment1/segment2?parameter=valueConverted

首先,我尝试做类似的事情:

var options = new RewriteOptions() 
  .AddRedirect("segment1/segment2/(.*)", "segment2/$1");

效果很好,但后来我被要求处理参数的值。 但是我还没有找到类似的东西:

var options = new RewriteOptions()  
  .AddRewrite(@"^param=$", "param=" MethodCall(how to send value here?) );

有什么指导吗?

【问题讨论】:

    标签: url asp.net-core url-rewriting url-redirection


    【解决方案1】:

    我发现了一些有趣的文章,例如 this,它们帮助我完成了这项工作……看看我的最终代码:

     public void Configure(IApplicationBuilder app ...
     {
            var options = new RewriteOptions()              
                .Add(new MyCustomRules());
                
                
    }
    

    ...

     public class MyCustomRules : Microsoft.AspNetCore.Rewrite.IRule
        {
        private int StatusCode { get; } = (int)System.Net.HttpStatusCode.MovedPermanently;
    
        private const string PARAMETER = "parameter=";
    
        public void ApplyRule(RewriteContext context)
        {
            var request = context.HttpContext.Request;
            var host = request.Host;
            var url = request.Path.Value;
            var queryString = request.QueryString.Value;
      
    
            if (queryString.Contains(PARAMETER, StringComparison.OrdinalIgnoreCase))
            {
                var host = request.Host;
                var originalText = queryString.Split(PARAMETER)[1]; 
    
                var convertedText = processText.Method(originalText);
    
                var newUrl = request.Scheme +  host.Value + request.Path + "?" + PARAMETER + convertedText;
                var response = context.HttpContext.Response;
                response.StatusCode = StatusCode;
                response.Headers[Microsoft.Net.Http.Headers.HeaderNames.Location] = newUrl;
                context.Result = RuleResult.EndResponse;
                return;
            }
    
            context.Result = RuleResult.ContinueRules;
            return;
        }
    }   
    

    更新:你必须小心重定向循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-07
      • 2017-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多