En la última versión beta de ASP.NET MVC4, ¿cómo apoyaría el soporte condicional de GET a través de ETags? El ActionFilter necesitaría poder completar la solicitud para generar el ETag para el recurso devuelto con el fin de compararlo con el encabezado If-None-Match en la solicitud. Y luego, independientemente de si la ETag entrante en el encabezado If-None-Match era la misma que la ETag generada, agregue la ETag generada al encabezado de respuesta ETag. Pero con ASP.NET MVC4, no tengo idea de dónde comenzar. ¿Alguna sugerencia?Implementación del soporte de ETag en ASP.NET MVC4 WebAPI
Respuesta
Hay un ETagMessageHandler en el WebApiContrib que hace lo que necesita.
ACTUALIZACIÓN
He implementado el almacenamiento en caché del lado del servidor RFC 2616 en WebApiContrib. Busque CachingHandler. Más información here.
más Actualizar
Esto se desarrolló y amplió bajo CacheCow activamente. Esto incluirá componentes de cliente y servidor. NuGet packages se publicará pronto se publican ahora.
WebApiContrib's CachingHandler se mantendrá así que cualquier error o problema, por favor avíseme.
Personalmente, no soy fanático de "framework magic" y prefiero el código simple en los métodos web, de lo contrario terminamos con algo más parecido a WCF, yuk.
Así, dentro de su método Get web, crear manualmente la respuesta de este modo:
var response = this.Request.CreateResponse(HttpStatusCode.OK, obj);
string hash = obj.ModifiedDate.GetHashCode().ToString();
response.Headers.ETag =
new EntityTagHeaderValue(String.Concat("\"", hash, "\""), true);
return response;
Tenga en cuenta que la ETag producido a partir del código hash de la marca de tiempo es puramente ilustrativo de un sistema de etiquetado entidad débil. También muestra las comillas adicionales requeridas.
Parece que esto es lo que busca (véase la sección "Soporte para ETags"):
En caso de que su modelo se almacena más profundo en el dominio y no son capaces de aplicar la [ ConcurrencyCheck] atributo, puede hacer que el uso de la ODataModelBuilder:
ODataModelBuilder builder = new ODataConventionModelBuilder();
var myEntity = builder.EntitySet<MyEntity>("MyEntities");
myEntity.EntityType.Property(l => l.Version).ConcurrencyToken = true;
esto hará que sea para agregar la propiedad "@ odata.etag" a un cuerpo de la respuesta.
respuesta de Lucas Puplett me consiguió en el camino correcto (1), pero tenga en cuenta que también hay que leer el ETag en el lado del servidor para evitar el envío de todos los datos con cada solicitud:
string hash = obj.ModifiedDate.GetHashCode().ToString();
var etag = new EntityTagHeaderValue(String.Concat("\"", hash, "\""), true);
if (Request.Headers.IfNoneMatch.Any(h => h.Equals(etag)))
{
return new HttpResponseMessage(HttpStatusCode.NotModified);
}
var response = this.Request.CreateResponse(HttpStatusCode.OK, obj);
response.Headers.ETag = etag;
return response;
Se También sería una buena idea respetar el encabezado If-Modified-Since
. Ver RFC 2616.
- 1. ASP.Net MVC4 WebApi proxy
- 2. LINQPad sobre MVC4 WebApi
- 3. MVC4 WebAPI Reason Phrase?
- 4. ASP.NET MVC4 WebAPI y publicación de datos XML
- 5. Cómo agregar registro a MVC4 WebAPI
- 6. Crear fuente RSS en MVC4/WebAPI
- 7. Enlace de MVC4 RC WebApi parámetro
- 8. ASP.Net WebAPI area support
- 9. MVC4 WebAPI no comprime las respuestas GET
- 10. No puedo hacer MVC4 WebApi incluir campos nulos en JSON
- 11. Cuál es la arquitectura correcta para MVC4 WebAPI
- 12. Validación Condicional en asp.net MVC4
- 13. Asp.Net MVC4 Display CheckboxList
- 14. Cifrado ASP.Net MVC y WebAPI
- 15. Problema de enrutamiento ASP.NET MVC4
- 16. Uso de HttpContext.Current en ASP.NET WebAPI
- 17. manipuladores de ruta personalizada en ASP.Net WebAPI
- 18. ASP.Net MVC4 Mobile-Aware OutputCache
- 19. Pero en serio ... Ejemplo de implementación WebAPI de ASP.NET que incluye OAuth
- 20. ASP.NET MVC4 validación discreto localización
- 21. Enlace de modelo de ASP.NET MVC4
- 22. Cómo invalidar RequestValidation en ASP.NET WebAPI
- 23. Prueba de unidad ASP.NET WebApi con Request.CreateResponse
- 24. Deserialización/vinculación de modelo en MVC4 webapi no funciona con las matrices
- 25. Herramienta de actualización Asp.Net MVC3 a MVC4?
- 26. Asp.Net MVC4 Web API - Volver OData el formato JSON de consulta sin MediaTypeFormatter encargo
- 27. ASP.Net Web Api + KnockoutJs + MVC4 - Vincularlo
- 28. ASP.NET WebApi + Autofac no encuentra ApiControllers
- 29. ¿Todos los ensamblados de ASP.NET MVC 4 RC son realmente necesarios para una implementación de ASP.NET WebAPI RC?
- 30. Eliminar Etag de favicon.ico