0

我正在尝试在 Web api 上使用 MvcMailer,但我被卡住了!!!我收到以下错误。我认为这与usermailer和view之间的路由有关。我看到它找不到视图,但我可能是错的。任何帮助将不胜感激。

谢谢

错误:

Value cannot be null.Parameter name: routeData

堆栈跟踪:

at System.Web.Routing.RequestContext..ctor(HttpContextBase httpContext, RouteData routeData)
   at System.Web.Mvc.ControllerContext..ctor(HttpContextBase httpContext, RouteData routeData, ControllerBase controller)
   at Mvc.Mailer.MailerBase.CreateControllerContext()
   at Mvc.Mailer.MailerBase.ViewExists(String viewName, String masterName)
   at Mvc.Mailer.MailerBase.TextViewExists(String viewName, String masterName)
   at Mvc.Mailer.MailerBase.PopulateBody(MailMessage mailMessage, String viewName, String masterName, Dictionary`2 linkedResources)
   at Mvc.Mailer.MailerBase.Populate(Action`1 action)
   at App.Api.Mailers.UserMailer.NewCandidate() in e:\VS2013 Projects\App.Api\Mailers\UserMailer.cs:line 15
   at App.Api.Controllers.CandidatesController.Get() in e:\VS2013 Projects\App.Api\Controllers\CandidatesController.cs:line 31

控制器:

    private readonly UserMailer _mailer = new UserMailer();      

    [Authorize]
    [Route("")]
    [HttpPost]
    // POST api/requests
    public HttpResponseMessage Post(Candidate candidate)
    {
        _repository.CandidateRepository.Insert(candidate);
        _repository.Save();
        _mailer.NewCandidate().Send();
        return Request.CreateResponse(HttpStatusCode.OK, candidate);

    }

用户邮件类:

 public class UserMailer : MailerBase, IUserMailer  
{
    public UserMailer()
    {
        MasterName="_Layout";
    }

    public virtual MvcMailMessage NewCandidate()
    {
        //ViewBag.Data = someObject;
        return Populate(x =>
        {
            x.Subject = "NewCandidate";
            x.ViewName = "NewCandidate";
            x.To.Add("test@test.test");
        });
    }
}

文件夹结构:

谢谢

4

2 回答 2

1

我也遇到了从 WebAPI2 项目发送邮件的问题——该项目也有 MVC 引用,但仅在我的一个 API 控制器中使用特定的邮件程序。我在另一个 API 控制器中有另一个邮件程序,完全没有问题。

但我只是补充说:

    this.ControllerContext = new System.Web.Mvc.ControllerContext(this.CurrentHttpContext, new System.Web.Routing.RouteData(), this);

进入邮件构造函数,现在一切正常。我假设在这个特定的例子中上下文/路由数据丢失了——可能是因为我在这个特定方法上的属性路由格式——因为工作的 API 方法(发送邮件)有一个稍微不同的 uri。但我可能会离题

也许有人可以解释到底发生了什么..

编辑:我稍微改变了路线并且低并且看到方法工作正常。在[RoutePrefix("api/bookings")]控制器上,然后

[Route("{ref}/sendmail")]
public async Task<IHttpActionResult> SendMail(string ref)

关于不起作用的方法

但是如果我从路由中删除参数并执行

[Route("sendmail")]
public async Task<IHttpActionResult> SendMail(string ref)

从查询字符串值中获取参数 - 它工作正常

于 2015-12-08T11:52:05.340 回答
0

我不认为它没有找到视图。我成功地使用了它,虽然您的代码与我的代码略有不同,但我看到的区别在于您的控制器。

在顶部声明中,我有:

    private IUserMailer _UserMailer = new UserMailer();
    public IUserMailer UserMailer
    {
        get { return _UserMailer; }
        set { _UserMailer = value; }
    }

我已更新此内容以反映您的邮件名称。希望这可以帮助。

于 2014-07-09T17:21:33.987 回答