내 사이트의 특정 페이지에 대한 링크가 포함 된 전자 메일을 보내는 정적 클래스가 있습니다. 그 링크는 동적으로 코드를 생성지고 :서비스에서 호출 된 MVC UrlHelper
UrlHelper urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
string url = urlHelper.Action("Details", "Product", new { id = ticketId }, "http");
문제는 내가 지금 주기적으로 현재 날짜와 만든 날짜를 비교하여 자동으로 그 메일을 전송하는 서비스가 있습니다. 물론 코드가 충돌하고 HttpContext.Current
은 null입니다 (요청이 아니기 때문에).
private static System.Web.Routing.RequestContext requestContext;
private static System.Web.Routing.RequestContext RequestContext {
get
{
if(requestContext == null)
requestContext = HttpContext.Current.Request.RequestContext;
return requestContext;
}
}
을하지만이 UrlHelper.Action에 대한 두 번째 RequestContext을 필요로 할 때 null 참조 예외를 말하는 충돌합니다.
내 서비스에서 메일 메서드를 호출 할 때 UrlHelper 또는 HttpContext를 저장/기억/전달하지 못했습니다.
것은, 당신이 ControllerContext를 사용한다. 이 코드는 어디에서 살고 있습니까? 라이브러리에 있으면 URL 도우미를 만드는 메서드에 적절한 컨텍스트를 전달해야합니다. 그러나 URL과 같은 웹 특정 항목을 볼 수 없습니다. 웹 레이어이므로 프로젝트의 웹 레이어에 있어야합니다. –
나는 UrlHelper와 함께 보내는 모든 것들을하는 MailMethods라는 정적 클래스를 가지고있다. 실제 문제는 이제 동일한 솔루션 파일에있는 모든 서비스에 액세스 할 수 있지만 HttpContext가없는 별도의 서비스가 있다는 것입니다. 현재 ... – CodingYourLife
@yourmother 다음에는 디자인 문제가 있습니다. 도우미 *가 HttpContext.Current에 의존하는 경우 사용할 수있는 환경에서만 사용해야합니다. 그렇지 않으면 HttpContext.Current에 대한 필요성을 리팩토링해야합니다. – James