mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 12:30:49 +08:00 
			
		
		
		
	realised the user can just set the region..delete time
This commit is contained in:
		@@ -12,9 +12,9 @@ namespace Ocelot.Cache
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        public string Region(ReRoute reRoute)
 | 
					        public string Region(ReRoute reRoute)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var methods = string.Join(",", reRoute.UpstreamHttpMethod.Select(m => m.Method));
 | 
					            var methods = string.Join("", reRoute.UpstreamHttpMethod.Select(m => m.Method));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var region = $"{methods} {reRoute.UpstreamPathTemplate.Value}";
 | 
					            var region = $"{methods}{reRoute.UpstreamPathTemplate.Value.Replace("/", "")}";
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            return region;
 | 
					            return region;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								src/Ocelot/Cache/Regions.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/Ocelot/Cache/Regions.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Ocelot.Cache
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public class Regions
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public Regions(List<string> value)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Value = value;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        public List<string> Value {get;private set;}
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -8,5 +8,6 @@
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public int TtlSeconds { get; private set; }
 | 
					        public int TtlSeconds { get; private set; }
 | 
				
			||||||
 | 
					        public string Region {get;private set;}
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,5 +3,6 @@
 | 
				
			|||||||
    public class FileCacheOptions
 | 
					    public class FileCacheOptions
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public int TtlSeconds { get; set; }
 | 
					        public int TtlSeconds { get; set; }
 | 
				
			||||||
 | 
					        public string Region {get;private set;}
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
using System.Net.Http;
 | 
					using System.Net.Http;
 | 
				
			||||||
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
using Microsoft.AspNetCore.Authorization;
 | 
					using Microsoft.AspNetCore.Authorization;
 | 
				
			||||||
using Microsoft.AspNetCore.Mvc;
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
using Ocelot.Cache;
 | 
					using Ocelot.Cache;
 | 
				
			||||||
@@ -20,10 +21,10 @@ namespace Ocelot.Controllers
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [HttpGet]
 | 
					        [HttpGet]
 | 
				
			||||||
        public IActionResult Get()
 | 
					        public async Task<IActionResult> Get()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var regions = _regionsGetter.Regions();
 | 
					            var regions = await _regionsGetter.Regions();
 | 
				
			||||||
            return new OkObjectResult(regions);
 | 
					            return new OkObjectResult(new Regions(regions));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [HttpDelete]
 | 
					        [HttpDelete]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,7 @@ using System.Net.Http.Headers;
 | 
				
			|||||||
using Microsoft.AspNetCore.Hosting;
 | 
					using Microsoft.AspNetCore.Hosting;
 | 
				
			||||||
using Microsoft.Extensions.DependencyInjection;
 | 
					using Microsoft.Extensions.DependencyInjection;
 | 
				
			||||||
using Newtonsoft.Json;
 | 
					using Newtonsoft.Json;
 | 
				
			||||||
 | 
					using Ocelot.Cache;
 | 
				
			||||||
using Ocelot.Configuration.File;
 | 
					using Ocelot.Configuration.File;
 | 
				
			||||||
using Ocelot.ManualTest;
 | 
					using Ocelot.ManualTest;
 | 
				
			||||||
using Shouldly;
 | 
					using Shouldly;
 | 
				
			||||||
@@ -221,7 +222,6 @@ namespace Ocelot.IntegrationTests
 | 
				
			|||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void should_return_regions()
 | 
					        public void should_return_regions()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					 | 
				
			||||||
            var initialConfiguration = new FileConfiguration
 | 
					            var initialConfiguration = new FileConfiguration
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                GlobalConfiguration = new FileGlobalConfiguration
 | 
					                GlobalConfiguration = new FileGlobalConfiguration
 | 
				
			||||||
@@ -261,8 +261,8 @@ namespace Ocelot.IntegrationTests
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            var expected = new List<string>
 | 
					            var expected = new List<string>
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                "get /",
 | 
					                "get",
 | 
				
			||||||
                "get /test"
 | 
					                "gettest"
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            this.Given(x => GivenThereIsAConfiguration(initialConfiguration))
 | 
					            this.Given(x => GivenThereIsAConfiguration(initialConfiguration))
 | 
				
			||||||
@@ -275,6 +275,57 @@ namespace Ocelot.IntegrationTests
 | 
				
			|||||||
                .BDDfy();
 | 
					                .BDDfy();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void should_clear_region()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var initialConfiguration = new FileConfiguration
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                GlobalConfiguration = new FileGlobalConfiguration
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    AdministrationPath = "/administration"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                ReRoutes = new List<FileReRoute>()
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    new FileReRoute()
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        DownstreamHost = "localhost",
 | 
				
			||||||
 | 
					                        DownstreamPort = 80,
 | 
				
			||||||
 | 
					                        DownstreamScheme = "https",
 | 
				
			||||||
 | 
					                        DownstreamPathTemplate = "/",
 | 
				
			||||||
 | 
					                        UpstreamHttpMethod = new List<string> { "get" },
 | 
				
			||||||
 | 
					                        UpstreamPathTemplate = "/",
 | 
				
			||||||
 | 
					                        FileCacheOptions = new FileCacheOptions
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            TtlSeconds = 10
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    new FileReRoute()
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        DownstreamHost = "localhost",
 | 
				
			||||||
 | 
					                        DownstreamPort = 80,
 | 
				
			||||||
 | 
					                        DownstreamScheme = "https",
 | 
				
			||||||
 | 
					                        DownstreamPathTemplate = "/",
 | 
				
			||||||
 | 
					                        UpstreamHttpMethod = new List<string> { "get" },
 | 
				
			||||||
 | 
					                        UpstreamPathTemplate = "/test",
 | 
				
			||||||
 | 
					                        FileCacheOptions = new FileCacheOptions
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            TtlSeconds = 10
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var regionToClear = "gettest";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            this.Given(x => GivenThereIsAConfiguration(initialConfiguration))
 | 
				
			||||||
 | 
					                .And(x => GivenOcelotIsRunning())
 | 
				
			||||||
 | 
					                .And(x => GivenIHaveAnOcelotToken("/administration"))
 | 
				
			||||||
 | 
					                .And(x => GivenIHaveAddedATokenToMyRequest())
 | 
				
			||||||
 | 
					                .When(x => WhenIDeleteOnTheApiGateway($"/administration/outputcache/{regionToClear}"))
 | 
				
			||||||
 | 
					                .Then(x => ThenTheStatusCodeShouldBe(HttpStatusCode.NoContent))
 | 
				
			||||||
 | 
					                .BDDfy();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private void GivenAnotherOcelotIsRunning(string baseUrl)
 | 
					        private void GivenAnotherOcelotIsRunning(string baseUrl)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _httpClientTwo.BaseAddress = new Uri(baseUrl);
 | 
					            _httpClientTwo.BaseAddress = new Uri(baseUrl);
 | 
				
			||||||
@@ -316,8 +367,8 @@ namespace Ocelot.IntegrationTests
 | 
				
			|||||||
        private void ThenTheResponseShouldBe(List<string> expected)
 | 
					        private void ThenTheResponseShouldBe(List<string> expected)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var content = _response.Content.ReadAsStringAsync().Result;
 | 
					            var content = _response.Content.ReadAsStringAsync().Result;
 | 
				
			||||||
            var result = JsonConvert.DeserializeObject<List<string>>(content);
 | 
					            var result = JsonConvert.DeserializeObject<Regions>(content);
 | 
				
			||||||
            result.ShouldBe(expected);
 | 
					            result.Value.ShouldBe(expected);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private void ThenTheResponseShouldBe(FileConfiguration expected)
 | 
					        private void ThenTheResponseShouldBe(FileConfiguration expected)
 | 
				
			||||||
@@ -417,6 +468,11 @@ namespace Ocelot.IntegrationTests
 | 
				
			|||||||
            _response = _httpClient.GetAsync(url).Result;
 | 
					            _response = _httpClient.GetAsync(url).Result;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void WhenIDeleteOnTheApiGateway(string url)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            _response = _httpClient.DeleteAsync(url).Result;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private void ThenTheStatusCodeShouldBe(HttpStatusCode expectedHttpStatusCode)
 | 
					        private void ThenTheStatusCodeShouldBe(HttpStatusCode expectedHttpStatusCode)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _response.StatusCode.ShouldBe(expectedHttpStatusCode);
 | 
					            _response.StatusCode.ShouldBe(expectedHttpStatusCode);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,6 +30,7 @@
 | 
				
			|||||||
  </ItemGroup>
 | 
					  </ItemGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <ItemGroup>
 | 
					  <ItemGroup>
 | 
				
			||||||
 | 
					    <PackageReference Include="Microsoft.AspNetCore.MiddlewareAnalysis" Version="1.1.1" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0-preview-20170106-08" />
 | 
					    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0-preview-20170106-08" />
 | 
				
			||||||
    <PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta2-build1317" />
 | 
					    <PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta2-build1317" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="1.1.1" />
 | 
					    <PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="1.1.1" />
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,6 +22,7 @@
 | 
				
			|||||||
  </ItemGroup>
 | 
					  </ItemGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <ItemGroup>
 | 
					  <ItemGroup>
 | 
				
			||||||
 | 
					    <PackageReference Include="Microsoft.AspNetCore.MiddlewareAnalysis" Version="1.1.1" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.AspNetCore.Http" Version="1.1.1" />
 | 
					    <PackageReference Include="Microsoft.AspNetCore.Http" Version="1.1.1" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="1.1.1" />
 | 
					    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="1.1.1" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="1.1.1" />
 | 
					    <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="1.1.1" />
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ namespace Ocelot.UnitTests.Cache
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            this.Given(_ => GivenTheReRoute(reRoute))
 | 
					            this.Given(_ => GivenTheReRoute(reRoute))
 | 
				
			||||||
                .When(_ => WhenICreateTheRegion())
 | 
					                .When(_ => WhenICreateTheRegion())
 | 
				
			||||||
                .Then(_ => ThenTheRegionIs("Get /test/dummy"))
 | 
					                .Then(_ => ThenTheRegionIs("Gettestdummy"))
 | 
				
			||||||
                .BDDfy();
 | 
					                .BDDfy();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,7 +61,7 @@ namespace Ocelot.UnitTests.Controllers
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        private void WhenIGetTheKeys()
 | 
					        private void WhenIGetTheKeys()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _result = _controller.Get();
 | 
					            _result = _controller.Get().Result;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private void ThenTheKeysAreReturned()
 | 
					        private void ThenTheKeysAreReturned()
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user