Tengo el siguiente acción del controladorcontrolador WebAPI Prueba Url.Link
public void Post(Dto model)
{
using (var message = new MailMessage())
{
var link = Url.Link("ConfirmAccount", new { model.Id });
message.To.Add(model.ToAddress);
message.IsBodyHtml = true;
message.Body = string.Format(@"<p>Click <a href=""{0}"">here</a> to complete your registration.<p><p>You may also copy and paste this link into your browser.</p><p>{0}</p>", link);
MailClient.Send(message);
}
}
Para probar esto necesito para configurar el controlador de contexto
var httpConfiguration = new HttpConfiguration(new HttpRouteCollection { { "ConfirmAccount", new HttpRoute() } });
var httpRouteData = new HttpRouteData(httpConfiguration.Routes.First());
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, "http://localhost");
sut = new TheController
{
ControllerContext = new HttpControllerContext(httpConfiguration, httpRouteData, httpRequestMessage),
MailClient = new SmtpClient { PickupDirectoryLocation = location }
};
Esto parece como un montón de configuración para probar la creación de un enlace. ¿Hay una manera más limpia de hacer esto? He leído acerca de los servidores en memoria, pero parece que se aplica más al httpclient que al controlador directamente.
+1 Pensé que el objetivo de los servicios REST era permitir recursos enlazables. Realmente no estoy contento con las utilidades WebAPI Link/Url. Hacer referencia al nombre de la ruta parece tan frágil y la historia de prueba es igualmente dolorosa. Afortunadamente, hay algunas mejoras por venir ... –