IT story

컨트롤러 .NET MVC에서 URL 생성

hot-time 2020. 7. 14. 08:00
반응형

컨트롤러 .NET MVC에서 URL 생성


컨트롤러의 액션에서 이메일을 보내려면 링크를 구성 할 수 있어야합니다. 가장 좋은 방법은 무엇입니까? 경로가 변경 될 경우 직접 구성하고 싶지 않습니다.

각 이메일을 볼 수 있고 렌더링하여 보내야합니까? 그렇게하는 것이 좋은 방법 일 수 있습니다.


특정 작업의 경로를 얻으려면 다음을 사용하십시오 UrlHelper.

UrlHelper u = new UrlHelper(this.ControllerContext.RequestContext);
string url = u.Action("About", "Home", null);

하이퍼 링크를 만들려면

string link = HtmlHelper.GenerateLink(this.ControllerContext.RequestContext, System.Web.Routing.RouteTable.Routes, "My link", "Root", "About", "Home", null, null);

Intellisense는 각 매개 변수의 의미를 제공합니다.


의견에서 업데이트 : 컨트롤러에는 이미 UrlHelper:

string url = this.Url.Action("About", "Home", null); 

전체 URL이 필요한 경우 (예 : 이메일로 전송) 다음 기본 제공 방법 중 하나를 사용하십시오.

이를 통해 URL을 빌드하는 데 사용할 경로를 만듭니다.

Url.RouteUrl("OpinionByCompany", new RouteValueDictionary(new{cid=newop.CompanyID,oid=newop.ID}), HttpContext.Request.Url.Scheme, HttpContext.Request.Url.Authority)

여기서 URL은 경로 엔진이 올바른 URL을 결정한 후에 작성됩니다.

Url.Action("Detail","Opinion",new RouteValueDictionary(new{cid=newop.CompanyID,oid=newop.ID}),HttpContext.Request.Url.Scheme, HttpContext.Request.Url.Authority)

두 방법 모두에서 마지막 2 개의 매개 변수는 프로토콜 및 호스트 이름을 지정합니다.

문안 인사.


나는 같은 문제를 겪었고 Gidon의 답변에는 하나의 작은 결함이있는 것처럼 보입니다. 메일로 보낼 수없는 상대 URL을 생성합니다.

내 솔루션은 다음과 같습니다.

string link = HttpContext.Request.Url.Scheme + "://" + HttpContext.Request.Url.Authority + Url.Action("ResetPassword", "Account", new { key = randomString });

이렇게하면 전체 URL이 생성되며 응용 프로그램이 호스팅 서버에서 여러 수준의 깊이에 있고 80 이외의 포트를 사용하더라도 작동합니다.

편집 : 나는 이것도 유용하다는 것을 알았 습니다.


액션에 대한 절대 URL을 생성하는 다른 방법 :

var relativeUrl = Url.Action("MyAction");  //..or one of the other .Action() overloads
var currentUrl = Request.Url;

var absoluteUrl = new System.Uri(currentUrl, relativeUrl);

나는 이것이 오래된 질문이라는 것을 알고 있지만 ASP.NET Core에서 동일한 작업을 수행하려는 경우 액션 내부에 UrlHelper를 만드는 방법은 다음과 같습니다.

var urlHelper = new UrlHelper(this.ControllerContext);

또는에서 Controller.Url상속받은 경우 속성을 사용할 수도 있습니다 Controller.

참고 URL : https://stackoverflow.com/questions/699782/creating-a-url-in-the-controller-net-mvc

반응형