2013-05-12 18 views
6

Mi sembra di aver rintracciato il problema ma non so come risolverlo, o se posso.Richiesta mancante.CreareResponse in vb.net Webapi Projects

Quando creo un nuovo progetto C# WebAPI, e aggiungi un import per System.Net.Http Posso accedere Request.CreateResponse<T>.

Quando creo un nuovo progetto VB.Net WebAPI e aggiungo un'importazione per System.Net.Http tutto ciò che ho è Request.createODataErrorResponse.

Posso comunque ignorare intellisense e accedere allo CreateResponse in ogni caso. Sembra che VB non stia interpretando correttamente le varie estensioni.

Mi piacerebbe aggiustare l'intellisense ma non ne ho davvero bisogno.

Grazie!

Steve

Aggiornamento Ho trovato questo forum post con una risposta indietro agosto 2012 spiegando che era stato duplicato, ma non sembra ancora essere risolto.

Come sono nuovo qui, dovrebbe essere chiuso?

+0

Suppongo che ciò sia dovuto alle impostazioni IDE in cui le opzioni avanzate sono nascoste da intellisense in VB (un'opzione come "mostra membri avanzati"). – shahkalpesh

+0

Questo non sembra essere correlato come la casella nelle opzioni per mVS2012 sono "Membri elenco automatico" che è selezionare e Nascondi membri avanzati che è deselezionato. – Steve

risposta

0

c'è una soluzione

mi si avvicinò con la seguente soluzione:

  1. creare estensioni metodi CreateResponse2 che chiamare il metodo originale CreateResponse
  2. Nei vostri controller, chiamare il nuovo metodo personalizzato (Request.CreateResponse2(...))

Qui di seguito è la mia soluzione:

Creare un nuovo modulo HttpRequestMessageExtensions

Imports System.Net 
Imports System.Net.Http 
Imports System.Web 
Imports System.Runtime.CompilerServices 
Imports System.Web.Http 

Public Module HttpRequestMessageExtensions 

    <Extension()> _ 
    Public Function CreateResponse2(Of T)(ByVal request As HttpRequestMessage,  statusCode As HttpStatusCode, value As T) As HttpResponseMessage 
     Return request.CreateResponse(Of T)(statusCode, value) 
    End Function 

    <Extension()> _ 
    Public Function CreateResponse2(Of T)(ByVal request As HttpRequestMessage, statusCode As HttpStatusCode, value As T, Configuration As HttpConfiguration) As HttpResponseMessage 
     Return request.CreateResponse(Of T)(statusCode, value, Configuration) 
    End Function 

    <Extension()> _ 
    Public Function CreateResponse2(Of T)(ByVal request As HttpRequestMessage, statusCode As HttpStatusCode, value As T, mediaType As String) As HttpResponseMessage 
     Return request.CreateResponse(Of T)(statusCode, value, mediaType) 
    End Function 

    <Extension()> _ 
    Public Function CreateResponse2(Of T)(ByVal request As HttpRequestMessage, statusCode As HttpStatusCode, value As T, formatter As Formatting.MediaTypeFormatter) As HttpResponseMessage 
     Return request.CreateResponse(Of T)(statusCode, value, formatter) 
    End Function 

    <Extension()> _ 
    Public Function CreateResponse2(Of T)(ByVal request As HttpRequestMessage, statusCode As HttpStatusCode, value As T, mediaType As Headers.MediaTypeHeaderValue) As HttpResponseMessage 
     Return request.CreateResponse(Of T)(statusCode, value, mediaType) 
    End Function 

    <Extension()> _ 
    Public Function CreateResponse2(Of T)(ByVal request As HttpRequestMessage, statusCode As HttpStatusCode, value As T, formatter As Formatting.MediaTypeFormatter, mediaType As String) As HttpResponseMessage 
     Return request.CreateResponse(Of T)(statusCode, value, formatter, mediaType) 
    End Function 

    <Extension()> _ 
    Public Function CreateResponse2(Of T)(ByVal request As HttpRequestMessage, statusCode As HttpStatusCode, value As T, formatter As Formatting.MediaTypeFormatter, mediaType As Headers.MediaTypeHeaderValue) As HttpResponseMessage 
     Return request.CreateResponse(Of T)(statusCode, value, formatter, mediaType) 
    End Function 

End Module 

Uso nei controllori:

Return Request.CreateResponse2(Of SomeClass)(HttpStatusCode.BadRequest, objSomeClass) 

Screenshot:

Working Workaround