■ ControllerLinkGeneratorExtensions 클래스의 GetPathByAction 확장 메소드를 사용해 절대 경로를 갖는 URL을 구하는 방법을 보여준다.
▶ Controllers/TestController.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Routing; using Microsoft.Docs.Samples; namespace TestProject.Controllers { /// <summary> /// 테스트 컨트롤러 /// </summary> public class TestController : Controller { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Private #region Field /// <summary> /// 링크 발생기 /// </summary> private readonly LinkGenerator linkGenerator; #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - TestController(linkGenerator) /// <summary> /// 생성자 /// </summary> /// <param name="linkGenerator">링크 발생기</param> public TestController(LinkGenerator linkGenerator) { this.linkGenerator = linkGenerator; } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Public #region 인덱스 페이지 처리하기 - Index() /// <summary> /// 인덱스 페이지 처리하기 /// </summary> /// <returns>액션 결과</returns> public IActionResult Index() { string url = this.linkGenerator.GetPathByAction(HttpContext, null, null, new { id = 17, }); return Content(url); } #endregion #region 구독 페이지 처리하기 - Subscribe(id) /// <summary> /// 구독 페이지 처리하기 /// </summary> /// <param name="id">ID</param> /// <returns>액션 결과</returns> public IActionResult Subscribe(int id) => ControllerContext.MyDisplayRouteInfo(id); #endregion #region 작성 페이지 처리하기 - Write() /// <summary> /// 작성 페이지 처리하기 /// </summary> /// <returns>액션 결과</returns> public IActionResult Write() { string url = this.linkGenerator.GetPathByAction("Subscribe", "Home", new { id = 17 }); return Content(url); } #endregion } } |
▶ Controllers/HomeController.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
using Microsoft.AspNetCore.Mvc; using Microsoft.Docs.Samples; using Microsoft.Extensions.Logging; using System.Diagnostics; using TestProject.Models; namespace TestProject.Controllers { /// <summary> /// 홈 컨트롤러 /// </summary> public class HomeController : Controller { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Private #region Field /// <summary> /// 로그 작업자 /// </summary> private readonly ILogger<HomeController> logger; #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - HomeController(logger) /// <summary> /// 생성자 /// </summary> /// <param name="logger">로그 작업자</param> public HomeController(ILogger<HomeController> logger) { this.logger = logger; } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Public #region 인덱스 페이지 처리하기 - Index() /// <summary> /// 인덱스 페이지 처리하기 /// </summary> /// <returns>액션 결과</returns> public IActionResult Index() { return View(); } #endregion #region 프라이버시 페이지 처리하기 - Privacy() /// <summary> /// 프라이버시 페이지 처리하기 /// </summary> /// <returns>액션 결과</returns> public IActionResult Privacy() { return View(); } #endregion #region 에러 페이지 처리하기 - Error() /// <summary> /// 에러 페이지 처리하기 /// </summary> /// <returns>액션 결과</returns> [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { return View(new ErrorViewModel { RequestID = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); } #endregion #region 구독 페이지 처리하기 - Subscribe(id) /// <summary> /// 구독 페이지 처리하기 /// </summary> /// <param name="id">ID</param> /// <returns>액션 결과</returns> public IActionResult Subscribe(int id) { return ControllerContext.MyDisplayRouteInfo(id); } #endregion } } |