Asp.Net Core 高級-URL重寫

URL重定向和重寫

1.URL重定向涉及客戶端操作,指示客戶端訪問與客戶端最初請求不同的資源,返回客戶端的重定向地址會出現在瀏覽器中。

301和302都是重定向。

301表示永久,則客戶端會緩存這個重定向地址

302表示臨時,客戶端不會緩存,臨時訪問

2.URL重寫是服務端操作,從與客戶端請求的資源不同的資源地址提供資源。重寫的URL不會返回客戶端。

擴展和選項

使用重定向中間件,規則可以使用正則表達式

            var re = new RewriteOptions();
            re.AddRewrite("api/todoItems/text", "api/todoItems/GetTodoItems",skipRemainingRules:true);
            re.AddRedirect("api/todoItems/text", "api/todoItems/GetTodoItems");
            app.UseRewriter(re);

將非www重定向到www

            re.AddRedirectToWww();
            re.AddRedirectToWwwPermanent();

重定向到https

            re.AddRedirectToHttps();
            re.AddRedirectToHttps(301,443);

應用文件

            re.AddApacheModRewrite(file stream);
            re.AddIISUrlRewrite(file stream);

基於方法的規則,自定義重定向規則

    public class RedirectRules
    {
        public static void RedirectXmlFileRequests(RewriteContext context)
        {
            var request = context.HttpContext.Request;

            if(request.Path.StartsWithSegments(new PathString("/xmlfiles")))
            {
                return;
            }
            if (request.Path.Value.EndsWith(".xml", StringComparison.OrdinalIgnoreCase))
            {
                var response = context.HttpContext.Response;
                response.StatusCode = StatusCodes.Status301MovedPermanently;
                context.Result = RuleResult.EndResponse;
                response.Headers[HeaderNames.Location] = "/xmlfiles" + request.Path + request.QueryString;
            }
        }
    }

調用

re.Add(RedirectRules.RedirectXmlFileRequests);

基於IRule的規則

繼承IRule,實現ApplyRule方法


action中的重定向

RedirectToAction 302
RedirectToActionPermanent 301
Ok(RedirectToAction) 200

重定向的地址其實就是當HTTP Status爲3XX開頭時,在Header中查找Location,然後重新訪問這個Loacation地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章