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);

    }

UserMailer クラス:

 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 コントローラーの 1 つに特定のメーラーがある場合のみです。まったく問題のない別の 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 に答える