2012-09-23 12 views
22

Lo vi en this blog post, pero eso en realidad no dice cómo "habilitarlo". Y parece que por defecto no está habilitado.¿Dónde está Request.CreateErrorResponse?

Sé que es un método de extensión, como se define aquí: http://msdn.microsoft.com/en-us/library/hh835786(v=vs.108).aspx pero ¿cómo puedo obtener acceso a ella? Si escribo Request.CreateErrorResponse, entonces el compilador no lo reconoce.

Ya soy using System.Net.Http.

+0

¿Qué tipo es 'Solicitud'? – SLaks

+0

¿Ha agregado referencias a los ensamblajes apropiados? –

+0

@SLaks: HttpRequestMessage. Esto es más o menos un ApiController con scaffolded. –

Respuesta

1

¿Todavía está utilizando versiones preliminares o de lanzamiento? Hubo varias extensiones que no aparecieron hasta justo antes del lanzamiento y que no existían en versiones anteriores del lanzamiento de webapi. No estoy seguro si este fue uno de ellos, pero puede ser lo que está causando su problema.

+0

Empecé con VS2012 RC y luego actualicé mi proyecto. No sé qué efecto tiene entre bastidores ... ¿Crees que debería empezar de nuevo? –

+0

Siempre comienzo limpio cuando paso de versiones beta/rc a publicación final pero no puedo decirte si eso resolvería tu problema. Si puede ver el método a través de ISense pero no se puede ver al compilar, podría ser un conflicto de versión. ¿Tiene algo como el reflector .net? Si lo hace, apúntelo a la DLL que está utilizando y vea si puede encontrar System.Net.Http.HttpRequestMessageExtensions y el método de extensión. Además, solo señalaría UNA de las DLL mencionadas, a menos que sea autohospedado, no hay ninguna razón para usar SelfHost.dll. – AlexGad

+0

Gracias. Recreé mi proyecto desde cero, y el problema desapareció. Muchas otras cosas se rompieron, pero ese problema ya no existe. :-) –

-1

Mi mejor conjetura es que es el tercer montaje, que no ha referenciado, ese es el problema.

Por desgracia, no tienen acceso a mi ordenador, navegando en mi teléfono, así que no puede localizar el archivo para usted. Según los documentos, debería estar en System.Web.Http.SelfHost.dll, así que supongo que podrías buscar ese archivo para localizarlo.

3

Solicitud es la propiedad pública de la clase ApiController y debe estar disponible para usted en cualquier acción API en ese controlador.

public abstract class ApiController 
{ 
    ... 
    public HttpRequestMessage Request { get; set; } 
} 

He aquí una pequeña muestra de código que funciona para mí:

using System.Net; 
using System.Net.Http; 
using System.Web.Http; 


public class MyFirstApiController : ApiController 
{ 
    // GET 
    public HttpResponseMessage Get(int id) 
    { 
     return Request.CreateErrorResponse(HttpStatusCode.ExpectationFailed, "Some message here"); 
    } 
} 

Curiosamente, si tomo distancia usando System.Net.Http; declaración, la solicitud ya no tiene un método CreateErrorResponse().

+1

Gracias ... De hecho, debería. Pero no fue así. Resuelto ahora, sin embargo, ver la respuesta aceptada. –

42

Lo he notado también en la versión de lanzamiento. Y si no tiene la declaración de uso correcta, se producirá un error. Usted necesitará:

using System.Net.Http; 

incluso si ya tiene esto:

using System.Web.Http.Controllers; 
+2

'usando System.Net.Http;' ayuda. No estoy seguro de por qué VS no sugiere agregarlo automáticamente. –

+1

Añadiendo 'using System.Web.Http.Controllers;' ayudado :) – Narayana

+2

@NikolaiSamteladze es porque son extensiones y Visual Studio no es lo suficientemente inteligente como para encontrarlos. – Peter

1

intento con esto:

using System.Net.Http; 

incluso si ya tiene esto:

using System.Web.Http.Controllers; 

Esto funcionó para mí.

1

Aunque se han respondido puntos importantes.

Otra posibilidad más tonta es que haya elegido un tipo de controlador incorrecto. Asegúrese de que ha creado un controlador de API Web , en caso de controlador MVC no se puede tener

Request.CreateErrorResponse() 

Sólo otra posibilidad donde se puede encontrar este problema.