MVC 5:无法在 URL 参数中发送某些值
MVC 5: Cant send certain values in URL parameters
我正在尝试将 asp.net mvc 5 中的 : / .
之类的字符发送到 API 控制器端点,但是当我尝试包含某些字符时它会失败。例如,我无法发送 message:hi
,我必须将其更改为 message_hi
才能使其正常工作。
我正在尝试使用 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/myemail@outlook.com/Hello There/Hi,\nThis is a url you can use for stuff: https://thisisit.com. \n Thanks bye.
我在发送前尝试过 HttpUtility.UrlEncode
正文,但没有任何作用。有谁知道如何发送包含这些类型字符的字符串?
我建议您使用 POST 动词来发送邮件正文。所以你可以从写一个视图模型开始:
public class MailMessageViewModel
{
public string Address { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
}
您的 Web API 操作将作为参数:
[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);
}
我正在尝试将 asp.net mvc 5 中的 : / .
之类的字符发送到 API 控制器端点,但是当我尝试包含某些字符时它会失败。例如,我无法发送 message:hi
,我必须将其更改为 message_hi
才能使其正常工作。
我正在尝试使用 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/myemail@outlook.com/Hello There/Hi,\nThis is a url you can use for stuff: https://thisisit.com. \n Thanks bye.
我在发送前尝试过 HttpUtility.UrlEncode
正文,但没有任何作用。有谁知道如何发送包含这些类型字符的字符串?
我建议您使用 POST 动词来发送邮件正文。所以你可以从写一个视图模型开始:
public class MailMessageViewModel
{
public string Address { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
}
您的 Web API 操作将作为参数:
[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);
}