2017-01-16 8 views
0

asp.net mvc 5の文字を:/.のようにAPIコントローラのエンドポイントに送信しようとしていますが、特定の文字を含むものを試すとすぐに失敗します。たとえば、私はmessage:hiを送ることができない、それを働かせるためにそれをmessage_hiに変えなければならない。MVC 5:URLパラメータに特定の値を送信する

私はExchangeを使用して電子メールを送信しようとしていますが、本文(URLやその他の情報を含む)は通過しません。

マイAPIコントローラ:

[Route("send/{adress}/{subject}/{body}")] 
     public void SendEmail(string adress, string subject, string body) 
     { 
      Office365MailSender ms = new Office365MailSender(); 
      EmailDto email = new EmailDto(adress, subject, body); 
      ms.Send(email); 
     } 

自分のアプリケーションから上記のエンドポイントを呼び出すには:

public static async Task<string> SendMail(IPhoneCall phoneCall) 
     { 
      var email = new EmailEntity(phoneCall); 

      using (var client = new HttpClient()) 
      { 
       var uri = new Uri("http://url/email/send/" + email.Recipient + "/" + email.Title + "/" + email.body); 
       var msg = await client.GetAsync(uri); 
      } 
      return "Email Sent"; 
     } 

uri変数の値の例は次のようになります。 http://url/email/send/[email protected]/Hello There/Hi,\nThis is a url you can use for stuff: https://thisisit.com. \n Thanks bye.

私は」私はそれを送る前に体にHttpUtility.UrlEncodeを試しましたが、それは何もしません。誰もこの種の文字を含む文字列を送る方法を知っていますか?

+1

は、それは良いでしょう、あなたのWeb APIアクションがパラメータとして取る

public class MailMessageViewModel { public string Address { get; set; } public string Subject { get; set; } public string Body { get; set; } } 

POSTを使用して、要求の本文でメッセージを送信します。 URLのパス部分にそのような特殊文字をエンコードしようとしないでください。あなたは失敗します:http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx –

+0

@DarinDimitrovこんにちは、ありがとう!それを行う方法について簡単なコードスニペットを提供し、それを回答として投稿できますか? :)リンクのおかげで、それを読むことになります。 –

答えて

1

メッセージの本文を送信するには、POST動詞を使用することをお勧めします。だから、ビューモデルを書き込むことによって開始することができます:

[Route("send")] 
[HttpPost] 
public IHttpActionResult SendEmail(MyViewModel model) 
{ 
    Office365MailSender ms = new Office365MailSender(); 
    EmailDto email = new EmailDto(model.Address, model.Subject, model.Body); 
    ms.Send(email); 
    return this.Ok(); 
} 

をして、あなたはこのように呼び出すことができます::

var email = new EmailEntity(phoneCall); 

using (var client = new HttpClient()) 
{ 
    var uri = new Uri("http://url/email/send"); 
    var content = new StringContent(
     JsonConvert.SerializeObject(new 
     { 
      Address = email.Recipient, 
      Subject = email.Title, 
      Body = email.body, 
     }), 
     UnicodeEncoding.UTF8, 
     "application/json"); 

    var msg = await client.PostAsync(uri, content); 
} 
+0

ちょうど私が必要としていたのは、get/postの使い方とuri/contentのフォーマット方法を理解するために本当に苦労したことです。ありがとう、トン! –

+0

私は通常のコントローラを使用している場合、 'IHttpActionResult'の代わりとなりますか?これを動作させようとすると404の気圧になるだけです。 –

+0

使用しているWeb APIのバージョンはどれですか?あなたは*ノーマルコントローラ*とは何を意味しますか? Web APIコントローラでは 'ApiController'を継承し、コントローラのアクションはこのコントローラ上で' IHttpActionResult'を返さなければならないメソッドです。 –

関連する問題