2013-05-12 8 views
6

Wygląda na to, że udało mi się wyśledzić problem, ale nie wiem, jak to naprawić, a jeśli mogę.Brakujące zapytanie.CreateResponse in vb.net Webapi Projects

Po utworzeniu nowego projektu C# WebAPI i dodaniu importu dla System.Net.Http mogę uzyskać dostęp do Request.CreateResponse<T>.

Po utworzeniu nowego projektu VB.Net WebAPI i dodaniu importu dla System.Net.Http wszystko, co mam, to Request.createODataErrorResponse.

Mimo to mogę zignorować intellisense i uzyskać dostęp do CreateResponse. Wydaje się, że VB nie interpretuje poprawnie różnych rozszerzeń.

Chciałbym naprawić intellisense, ale tak naprawdę nie potrzebuję go.

Dzięki!

Steve

Aktualizacja Znalazłem forum post z odpowiedzią w sierpniu 2012 roku tłumacząc, że został powielony, ale jeszcze nie wydaje się być rozwiązany.

Ponieważ jestem tutaj nowy, powinien on zostać zamknięty?

+0

Przypuszczam, że jest to spowodowane ustawieniami IDE, w których zaawansowane opcje są ukryte przed intellisense w VB (opcja taka jak "pokaż zaawansowanych członków"). – shahkalpesh

+0

Nie wydaje się to być powiązane, ponieważ pole w opcjach dla mVS2012 to "Lista autorów", która jest wybrana, i Ukryj zaawansowane elementy, które są odznaczone. – Steve

Odpowiedz

0

Istnieje obejście

wymyśliłem następujące rozwiązanie:

  1. Tworzenie Metody Rozszerzenia CreateResponse2 wywołujące oryginalny CreateResponse metoda
  2. W kontrolerach, wywołać nową metodę niestandardową (Request.CreateResponse2(...))

Poniżej jest moje rozwiązanie:

Utwórz nowy moduł 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 

wykorzystanie w kontrolerach:

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

Zrzut ekranu:

Working Workaround