sistemas - Qué cosas inteligentes has hecho con un método de acción ASP.NET MVC
sistema de recomendacion tesis (5)
¿Un HTTP 301 Redirect cuenta como inteligente?
public class PermanentRedirectResult : ActionResult
{
public string Url { get; set; }
public PermanentRedirectResult(string url)
{
if (string.IsNullOrEmpty(url))
{
throw new ArgumentException("url is null or empty", "url");
}
this.Url = url;
}
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
context.HttpContext.Response.StatusCode = 301;
context.HttpContext.Response.RedirectLocation = Url;
}
}
Los métodos de acción del controlador ASP.NET MVC se usan principalmente para manejar operaciones ''comerciales'', pero se pueden usar para muchas más.
Pensé que sería divertido ver qué cosas creativas y útiles las personas han creado acciones para que puedan ser prácticas o útiles para otros.
Aquí está mi contribución:
Concatenator de archivos de Javascript: para reducir el número de solicitudes http:
[OutputCache(Duration = 5 * 60, VaryByParam="")] // DONT USE "None" here *
public ContentResult RenderJavascript(){
StringBuilder js = new StringBuilder();
StringWriter sw = new StringWriter(js);
// load all my javascript files
js.AppendLine(File.ReadAllText(Request.MapPath("~/Scripts/jquery.hoverIntent.minified.js")));
js.AppendLine(File.ReadAllText(Request.MapPath("~/Scripts/jquery.corner.js")));
js.AppendLine(File.ReadAllText(Request.MapPath("~/Scripts/rollingrazor.js")));
return new ContentResult()
{
Content = js.ToString(),
ContentType = "application/x-javascript"
};
}
Mapa de una ruta a él:
// javascript
routes.MapRoute(
"js-route",
"dynamic/js",
new { controller = "Application", action = "RenderJavascript" }
);
Consulte desde su página maestra:
<script type="text/javascript" src="/dynamic/js"></script>
Ten en cuenta que he configurado un caché para el resultado, por lo que si cambias tu JS y actualizas la página, es posible que desees desactivar el caché.
Pero necesito volver y descubrir cómo descomprimirlo.
*
No debe usar VaryByParam = "Ninguno" porque hace que se envíe el encabezado Variar, lo que hace que el navegador regrese y busque una nueva versión . ¡Si realmente tiene que cambiar el contenido de su js, sus usuarios tendrán que esperar 5 minutos para hacerlo!
En realidad, no es un método de "acción", sino un controlador personalizado que implementa una implementación RPC basada en rutas. Identifica el contrato y el método de los datos de la ruta y pasa la llamada a la implementación del servicio del lado del servidor. Bastante eficiente (y sí, hay razones válidas por las que no solo uso WCF o SOAP).
Ver resultado con confirmación por correo electrónico:
public abstract class ViewResultWithConfirmationEmail: ViewResult
{
protected readonly string toAddress;
protected ViewResultWithConfirmationEmail(string toAddress)
{
this.toAddress = toAddress;
}
protected abstract MailMessage CreateEmail(ControllerContext context);
protected override void ExecuteResult(ControllerContext context)
{
MailMessage message = CreateEmail(context);
var smtpClient = new SmtpClient();
smtpClient.Send(message);
base.ExecuteResult(context);
}
}
Algunos de los detalles de la implementación se han omitido aquí, pero podría usar esto para implementar una clase RegistrationSuccessResult
, por ejemplo, que envíe un mensaje de correo electrónico con el texto apropiado después de un registro exitoso del usuario.
La razón por la que elegí enviar el mensaje en un ViewResult subclasificado en lugar de hacerlo en el método de acción en sí fue para facilitar la separación de mis pruebas unitarias.
Una implementación parcial de menos , un extensor de sintaxis css
En realidad solo admite constantes y lo que ellos llaman mixins, la fuente está aquí .
En esta publicación , expliqué cómo usarlo en mvc (la publicación está en italiano, pero solo mira la fuente):
puedes mirar aquí el resultado
No estoy seguro de cuántos de ustedes están usando áreas, pero una secuencia de comandos de XCopy es bastante necesaria al hacer cambios de Vista en un Área. Las áreas se compilan en el proyecto principal, pero solo en la compilación (no en guardar), por lo que para mantener la agilidad del desarrollo, deberá ejecutar un XCopy.