2017-01-16 2 views
2

MVCとWeb APIの新機能です。 私は作成したWeb APIにMailMessage(System.Net.Mail)オブジェクトを投稿しようとしていますが、オブジェクトはAPIで空として受信されています。私は、以下のAPIを呼び出すためにReshSharpを使用していますことは、私のコードです:MVC Web APIのポストメソッドでMailMessageオブジェクトが空になっています

MailMessage myMail = new System.Net.Mail.MailMessage("[email protected]", "[email protected]"); 
myMail.Subject = "Test message from client"; 
myMail.SubjectEncoding = System.Text.Encoding.UTF8; 
myMail.Body = "<b>Test Mail</b><br>using <b>HTML from client</b>."; 
myMail.BodyEncoding = System.Text.Encoding.UTF8; 
myMail.IsBodyHtml = true; 

RestClient client = new RestClient("http://localhost:53014/api/email"); 
var request = new RestRequest("SendMailMessage", Method.POST); 
var json = request.JsonSerializer.Serialize(myMail); 
request.AddParameter("application/json; charset=utf-8", json, ParameterType.RequestBody); 
request.RequestFormat = DataFormat.Json; 
var res = client.Execute(request); 

これは私のAPIメソッドである:

[HttpPost] 
public void SendMailMessage([FromBody]MailMessage myEmail) 
{ 
    //Code to send email 
} 

これは私がAPI側で受信するものである: API Post method

私もこの方法で試しましたが、同じ出力:

request = new RestRequest("SendMailMessage", Method.POST); 
request.RequestFormat = DataFormat.Json; 
request.AddBody(myMail); 
res = client.Execute(request); 

私はhまた、Newtonsoft.Jsonシリアライザでオブジェクトをシリアライズしようとしましたが、成功しませんでした。

私はここで何が欠けているのでしょうか?

+0

アクションに送信する情報を保持するカスタムモデル/ viewmodel/payloadを作成し、アクションに提供されたプロパティを使用してアクションでメールメッセージを作成します。 MailMessageを送信しようとすると問題があります。 – Nkosi

答えて

0

MailMessageを送信しようとすると問題があります。

あなたは

public class Email { 
    public string Body { get; set; }   
    public bool IsBodyHtml { get; set; } 
    public string Subject { get; set; } 
    public string[] To { get; set; } 
    //...Any other properties you deem relevant 
    //eg: public string From { get; set; } 
} 

はそれをシンプルに保つ...ウェブAPIに送信され、必要な情報を保持するために、カスタムオブジェクトを作成する必要があります。

は、だから今は、その後のアクションに提供されるプロパティを使用してアクションにメールメッセージを作成するWeb APIを

var myMail = new Email() { 
    To = new [] { "[email protected]" }, 
    Subject = "Test message from client", 
    Body = "<b>Test Mail</b><br>using <b>HTML from client</b>.", 
    IsBodyHtml = true 
};  

var client = new RestClient("http://localhost:53014/api/email"); 
var request = new RestRequest("SendMailMessage", Method.POST); 
var json = request.JsonSerializer.Serialize(myMail); 
request.AddParameter("application/json; charset=utf-8", json, ParameterType.RequestBody); 
request.RequestFormat = DataFormat.Json; 
var res = client.Execute(request); 

にカスタムオブジェクトを送信します。

+0

MailMessageがシリアライズ可能でないため、なぜ問題なのですか?私が思っていた最後の方法は、カスタムタイプの構築だけでした。 – Rakesh

+0

私はこの方法だけに行くと思うが、これを答えにすることはできない。 – Rakesh

関連する問題