首页 文章

ASP.NET CORE中的动态URL重写

提问于
浏览
1

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

this article开始,到目前为止,我发现了一种使用正则表达式替换URL段的方法 .

我的情况如下:给出URL

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

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

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?) );

任何指导?

1 回答

  • 0

    我找到了一些有趣的文章,如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;
        }
    }
    

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

相关问题