7

I seem to have tracked down the problem but do not know how to fix it, or if I can.

When I create a new C# WebAPI project, and add an import for System.Net.Http I can access Request.CreateResponse<T>.

When I create a new VB.Net WebAPI project, and add an import for System.Net.Http all I have is Request.createODataErrorResponse.

I can however ignore intellisense and access CreateResponse anyway. Seems VB just isn't interpreting the various extensions correctly.

I'd like to fix the intellisense but don't really have a need for it.

Thanks!

Steve

Update I found this forum post with an answer back in August 2012 explaining that it had been duplicated, but does not yet appear to be fixed.

As I am new here, should this be closed?

Steve
  • 596
  • 2
  • 7
  • 20
  • I suppose, this is due to IDE settings whereby advanced options are hidden from intellisense in VB (an option like "show advanced members"). – shahkalpesh May 13 '13 at 07:09
  • This doesn't appear to be related as the box in the options for mVS2012 are "Auto List Members" which is select, and Hide Advanced Members which is deselected. – Steve May 14 '13 at 12:20

1 Answers1

0

There is a workaround

I came up with the following solution:

  1. Create extensions methods CreateResponse2 that call the original CreateResponse method
  2. In your controllers, call the new custom method (Request.CreateResponse2(...))

Below is my solution:

Create a new module 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

Usage in controllers:

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

Screenshot:

Working Workaround

Simcha Khabinsky
  • 1,970
  • 2
  • 19
  • 34