ㆍapp.UseHttpsRedirection(); |
http:// 로 들어온 요청을 , https:// 로 리다이렉트 전달하는 미들웨어이다. 단, 웹서버의 SSL이설정되어 , 호스트가 작동 되고 있어야 하며, SSL 설정이 없으며 , 그냥 http로 열린다. 예를들어, http://localhost:6478/ 을 요청하면, https://localhost:44322/ 로 자동으로 리다이렉트 하는 것을 볼수있으며, 만약 https://localhost:44322/가 작동하지 않는다면, 아무 반응 없이 기본, http://localhost:6478/ 로 열리게된다. http 와 https 로 작동되게 프로젝트를 만들고(프로젝트생성시, SSL체크하던가 , 프로젝트 속성에서 SSL체크) – SSL 포트를 강제로 지정 ConfigureServices() 컨테이너에서 서비스 옵션을 추가하고 미들웨어에서 실행한다. pubilc void ConfigureServices(IServicesCollection services) { services.AddHttpsRedirection(options => { //options.RedirectStatusCode = (int)HttpStatusCode.TemporaryRedirect; options.HttpsPort = 5001; }); } public void Configure(IApplicationBuilder app , IEnvironment env) { app.useHttpsRedirect(); } |
http://localhost:6478/ 을 요청하면, https://localhost:44322/ 가 작동하고 있지만 https://localhost:5001 로 이동한다. (https 가 운영되고 있지않아도 강제로 이동한다.) 웹 페이지 내에서 사용되는 정적파일(이미지 , css , js , hwp , pdf 등의 정적파일)을, 지정한 경로에서 서빙하도록 추가하는 미들웨어, 정적경로를 따로 지정하지 않으면 기본적으로 웹 프로젝트의 “wwwroot” 경로가 지정되어 있으며, “wwwroot” 폴더에 “image”폴더를 만들고 이미지파일을 업로드하면, “http://locahost/image/업로드이미지.jpg” 호출시 파일이 서빙됨 wwwroot\upload.jpg | http://localhost:6478/upload.jpg | wwwroot\image\upload.jpg | http://localhost:6478/image/upload.jpg |
만약 미들웨어에, app.UseStaticFiles() 미들웨어를 호출하지 안터라도 기본적으로 “wwwroot” 폴더에서 정적파일을 서빙해온다. 기본 정적 파일 미들웨어(app.UseStaticFiles();가 UseAuthentication전에 호출되어야 wwwroot 아래의 정적 자산은 공개적으로 액세스할 수 있습니다. – 정적서빙파일 폴더 지정하기 ★★app.UseStaticFiles() 정적파일 미들웨어옵션은 ConfigureServices() 컨테이너를 통해 서비스 등록시 옵션을 추가하지않고 UseStaticFiles() 확장메서드를 사용해 ,미들웨어 추가시 직접 옵션을 설정한다. 정적 파일경로 | /wwwroot/ | 이미지물리경로 | /wwwroot/image/test.png | URL(기본:wwwroot) | http://localhost/6479/image/test.png |
app.UseStaticFiles(new StaticFileOptions() { RequestPath = new PathString(“/MyImageFolder”); // 반드시 상대경로 “/”로 시작하여 추가해야됨 });
호출 | http://localhost:6478/MyImageFolder/image/test.png |
ㆍ정적파일 물리적 경로 추가 app.UseStaticFiles(new StaticFileOptions() { FileProvider = new PhysicalFileProvider(“/UserImg”) // 이렇게 지정하면 c:\UserImg경로됨, 유의 }); 기본경로(물리적) | C:\Users\Pluginn\source\repos\TestProject\TestProject\wwwroot | 추가경로(물리적) | C:\userImage | | wwwroot 도 사용되고 userImg 둘다 사용가능하게됨 |
app.UseStaticFiles(new StaticFileOptions() { FileProvider = new PhysicalFileProviderPath.Combine(Directory.GetCurrentDirectory() , “UserImg”)) }); 기본경로(물리적) | C:\Users\Pluginn\source\repos\TestProject\TestProject\wwwroot | 추가경로(물리적) | C:\Users\Pluginn\source\repos\TestProject\TestProject\UserImg | 호출 | http://localhost:6478/image/test.png — wwwroot 의 image 찾아감 http://localhost:6478/test.png –/UserImg 로 image 찾아감 |
ㆍ정적파일 물리적 경로 여러개 추가하기 – UseStaticfiels 확장메서드 미들웨어 여러분 추가함 app.UseStaticFiles(new StaticFileOptions() { FileProvider = new PhysicalFileProviderPath.Combine(Directory.GetCurrentDirectory() , “UserImg”)) , RequestPath = new PathString(“/UserImgAll“) }); app.UseStaticFiles(new StaticFileOptions() { FileProvider = new PhysicalFileProviderPath.Combine(Directory.GetCurrentDirectory() , “MyImg”)) }); FileProvider 를 통해 지정된 폴더는 정적파일의 루트경로이므로 http://localhost:6578/uploadFile.jpg 로 호출해야하며, 파일구분을 위해서는 반드시 서브폴더를 생성하여야한다. | 기본경로(물리적) | C:\Users\Pluginn\source\repos\TestProject\TestProject\wwwroot | 추가경로(물리적) | C:\Users\Pluginn\source\repos\TestProject\TestProject\UserImg | | http://localhost:6578/UserImgAll/upload.jpg — RequestPath 에서 저장한 가상경로, 호출시 경로명으로 입력해줘야한다. | 추가경로(물리적) | C:\Users\Pluginn\source\repos\TestProject\TestProject\MyImg | userImg 와 MyImg 를 정적파일 경로로 더 추가함 기본적으로 wwwroot 도 지원하므로 총 3군데 경로가 생김 | http://localhost:6578/upload.jpg 호출시 : wwroot 의 upload.jpg 가 먼저 출력되며, 만약없으면 userImg , MyImg 경로 순으로 찾아가 서빙힌다. |
ㆍ정적파일 캐시 시간지정 하기 var cacheMaxAge =(30).ToString(); app.UseStaticFiles(new StaticFileOptions { OnPrepareResponse = ctx => { ctx.Context.Response.Headers.Append(“Cache-Control”, $”public, max-age={cacheMaxAge }”); } }); 한번 읽어들인 정적파일에 대해 30초간 캐쉬된 파일을 읽어온다(서버에서 새로 안 읽어옴) 캐쉬 설정을 안하더라도 정적파일에 대해 기본 캐쉬시간이 있기때문에, 매번 서버로 부터 서빙 받기위해서는 캐쉬 시간 설정을 0 으로 하여, 서버로 부터 계속 읽어오도록하자 |
|
|
app.UseRouting()은, 전달받은 URI 의 경로를 파악하여, 요청한 URL 과 매핑되는 controller(action) 로 라우팅해준다. 이때, app.UseEndPoints() 미들웨어에 설정된 endPoints.MapControllerRoute()메서드를 통해 매핑도니 Route 경로로 이동한다.d app.UseEndpoints() 미들웨어가 작동하기 위해서는 서비스 콘테이너에 services.AddMvc() 와 같은 app.useEndpoints() 미들웨어를 지원하는 서비스를 등록해야한다. services.AddMvc() → app.UseEndpoints(endpoints) → app.UseRouting() → endpoints.MapControllerRoute() – ConfigureServices(IServiceCollection services) 메서드에 서비스 등록 services.AddMvc(); – Configure(IApplication app) app.useRouting(); app.UseEndPoints(endpoints => { endpoints.MapControllerRoute( name: “default”, pattern: “{controller=Home}/{action=Index}/{id?}”); }); ㆍ지원하는 서비스 AddMvc() , AddControllersWithViews() , AddController() , AddRazorPages() [Cors 정책 설정하기] 1) Services.AddCors() 를 통합 허용 도메인 및 허용동사 설정 2) app.UseCors(); 3) userContorller.cs 에서 [EnableCors(‘Cors이름’)] , [DisabledCors] attribute 활용 , 엔드포인트 라우팅 사용 ㆍUseCors 및 UseStaticFiles 순서 일반적으로 UseStaticFiles는 UseCors 이전에 호출됩니다. JavaScript를 사용하여 사이트 간 정적 파일을 검색하는 앱은 UseStaticFiles 이전에 UseCors를 호출해야 합니다. — configureServices() 메서드에서 서비스 옵션 설정 1) Services.AddCors(options => { options.AddPolicy(name: “MyCorsPolicy“, policy => { policy.WithOrigins( “http://example.com”, “http://www.contos.com”, “https://cors1.azurewebnet”, “https://localhost:80” ) .WithMethods(“PUT”, “DELETE”, “GET”); }); }); — configure() 메서드 미들웨어 등록 2) app.UseCors(); — controller 클래스 사용 3) Attribute 로 Cors 정책 사용하기 [EnableCors(“MyCorsPolicy“)] public class MyClass { public MyClass() { } [HttpGet] public void Get() { } // GET: api/MyClass/5 [HttpGet(“{id}”)] public void Get(int id) { } //Get : api/MyClass/myaction [DisableCors] // cors 정책적용 안함 [HttpGet(“action”)] public void GetAction(string action) { } } ★ EndPoint Routing 을 이용한 Cors 활성화 “RequreCors” 메서드 사용하기 1) Services.AddCors() 를 통합 허용 도메인 및 허용동사 설정 2) app.UseCors(); 3) endPoint 라우트 에 확장메서드 RequireCors(“Cors정책이름”) 로 설정하기 3) userContorller.cs 에서 [EnableCors(‘Cors이름’)] , [DisabledCors] attribute 활용 — configureServices() 메서드 등록 1) Services.AddCors(options => { options.AddPolicy(name: “MyCorsPolicy“, policy => { policy.WithOrigins( “http://example.com”, “http://www.contos.com”, “https://cors1.azurewebnet”, “https://localhost:80” ) .WithMethods(“PUT”, “DELETE”, “GET”); }); }); — configure() 메서드 미들웨어 등록 2) app.UseCors(); 또는, app.UseCors(option => {}); 을 통해 services.AddCors() 등록하지 않고도 사용가능 3) app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: “default”, pattern: “{controller=Home}/{action=Index}/{id?}”).RequireCors(“MyCorsPolicy“); }); app.UseResponseCompression(); |
app.UseResponseCaching(); |
[응답캐시 설정하기] * configureServices() 메서드에서 서비스 옵션 추가 Services.AddResponseCaching(options => { options.MaximumBodySize = 1024; options.UseCaseSensitivePaths = true; }); * configure() 메서드에 미들웨어추가 app.UseResponseCaching(); MaximumBodySize | 응답 본문의 캐시 가능한 최대 크기(바이트)입니다.기본값은 64 * 1024 * 1024(64MB) | UseCaseSensitivePaths | 대/소문자를 구분하는 경로에서 응답이 캐시되는지 여부를 결정합니다. 기본값은 false | SizeLimit | 응답 캐시 미들웨어의 크기 제한(바이트)입니다. 기본값은 100 * 1024 * 1024 (100MB) |
|