// stuff......

    return SendCreationMail(Membership.GetUser((Guid)request.UserEntityId), request, new Control());
}

private const string TemplateRoot = "~/app_shared/templates/mail/";
private const string ServerRoot = TemplateRoot + "server/";

public static bool SendCreationMail(MembershipUser user, IServerAccountRequest request, Control owner)
{
    var definition = new MailDefinition { BodyFileName = string.Concat(ServerRoot, "creation.htm"), IsBodyHtml = true };
    var subject = "New {0} account created!".FormatWith(request.ServerApplicationContract.Id);

    var data = ExtendedData(DefaultData, subject, user);

    data.Add("<%ServerApplication%>", request.ServerApplicationContract.Id);
    data.Add("<%ServerApplicationName%>", request.ServerApplicationContract.ApplicationName);
    data.Add("<%AccountUsername%>", request.AccountUsername);

    data.Add("<%ServerInfo%>", "/server/{0}/info".FormatWith(request.ServerApplicationContract.Id.ToLower()));

    return definition.CreateMailMessage(user.Email, data, owner).Send(subject, ApplicationConfiguration.MailSenderDisplayName);
}

我得到:



问题是我没有传递给它的实际控件,我想知道如何设置一个避免这种毫无意义的异常的控件。我正在使用相对路径...所以这没有任何意义。

具有该服务的应用程序在ASP.NET WebForms .NET 4下。使用者应用程序也是也在.NET 4下的控制台应用程序。

最佳答案

我遇到了同样的问题,并且得知发生这种情况是因为尝试执行您的definition.CreateMailMessage时找不到控件的路径。您要创建一个空白的Web用户控件。也许这不是最优雅的解决方案,但却可以解决问题。

这是我所做的:

1)在您的项目中添加一个Web用户控件文件,例如Test.ascx。

2)在您的.svc文件中,添加以下代码:

Page page = new Page();

Test test = (Test)page.LoadControl("Test.ascx");

3)将您的definition.CreateMailMessage行更新为:
return definition.CreateMailMessage(user.Email, data, test).Send(subject, ApplicationConfiguration.MailSenderDisplayName);

您将不再获得basepath null异常。

10-05 23:47